| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 | <?php namespace Laravel;class URI {	/**	 * The URI for the current request.	 *	 * @var string	 */	public static $uri;	/**	 * The URI segments for the current request.	 *	 * @var array	 */	public static $segments = array();	/**	 * Get the URI for the current request.	 *	 * @return string	 */	public static function current()	{		if ( ! is_null(static::$uri)) return static::$uri;		$uri = parse_url($_SERVER['REQUEST_URI'], PHP_URL_PATH);		// Remove the root application URL from the request URI. If the application		// is nested within a sub-directory of the web document root, this will get		// rid of all of the the sub-directories from the request URI.		$uri = static::remove($uri, parse_url(URL::base(), PHP_URL_PATH));		// We'll also remove the application's index page as it is not used for at		// all for routing and is totally unnecessary as far as the framework is		// concerned. It is only in the URI when mod_rewrite is not available.		if (($index = '/'.Config::get('application.index')) !== '/')		{			$uri = static::remove($uri, $index);		}		static::$uri = static::format($uri);		// Cache the URI segments. This allows us to avoid having to explode		// the segments every time the developer requests one of them. The		// extra slashes have already been stripped off of the URI so no		// extraneous elements should be present in the segment array.		$segments = explode('/', trim(static::$uri, '/'));		static::$segments = array_diff($segments, array(''));		return static::$uri;	}	/**	 * Get a specific segment of the request URI via an one-based index.	 *	 * <code>	 *		// Get the first segment of the request URI	 *		$segment = URI::segment(1);	 *	 *		// Get the second segment of the URI, or return a default value	 *		$segment = URI::segment(2, 'Taylor');	 * </code>	 *	 * @param  int     $index	 * @param  mixed   $default	 * @return string	 */	public static function segment($index, $default = null)	{		static::current();		return array_get(static::$segments, $index - 1, $default);	}	/**	 * Remove a given value from the URI.	 *	 * @param  string  $uri	 * @param  string  $value	 * @return string	 */	protected static function remove($uri, $value)	{		return (strpos($uri, $value) === 0) ? substr($uri, strlen($value)) : $uri;	}	/**	 * Format a given URI.	 *	 * @param  string  $uri	 * @return string	 */	protected static function format($uri)	{		return (($uri = trim($uri, '/')) !== '') ? $uri : '/';	}}
 |