Manipulates and generates URI strings.

This class helps you to create and manipulate URIs, including query strings and path elements. It does so by splitting up the pieces of the URI and allowing you modify them individually; you can then then fetch them as a single URI string. This helps when building complex links, such as in a paged navigation system.

Note: For controller action URIs, use Solar_Uri_Action. Likewise, for public resource URIs, use Solar_Uri_Public.

The following is a simple example. Say that the page address is currently http://anonymous::guest@example.com/path/to/index.php/foo/bar?baz=dib#anchor.

You can use Solar_Uri to parse this complex string very easily:

require_once 'Solar.php';

// create a URI object; this will automatically import the current
// location, which is...
// http://anonymous:guest@example.com/path/to/index.php/foo/bar.xml?baz=dib#anchor
$uri = Solar::factory('Solar_Uri');

// now the $uri properties are ...
// $uri->scheme   => 'http'
// $uri->host     => 'example.com'
// $uri->user     => 'anonymous'
// $uri->pass     => 'guest'
// $uri->path     => array('path', 'to', 'index.php', 'foo', 'bar')
// $uri->format   => 'xml'
// $uri->query    => array('baz' => 'dib')
// $uri->fragment => 'anchor'

Now that we have imported the URI and had it parsed automatically, we can modify the component parts, then fetch a new URI string.

// change to 'https://'
$uri->scheme = 'https';

// remove the username and password
$uri->user = '';
$uri->pass = '';

// change the value of 'baz' to 'zab'
$uri->setQuery('baz', 'zab');

// add a new query element called 'zim' with a value of 'gir'
$uri->query['zim'] = 'gir';

// reset the path to something else entirely.
// this will additionally set the format to 'php'.

// add another path element
$uri->path[] = 'another';

// and fetch it to a string.
$new_uri = $uri->get();

// the $new_uri string is as follows; notice how the format
// is always applied to the last path-element.
// /something/else/entirely/another.php?baz=zab&zim=gir#anchor

// wait, there's no scheme or host!
// we need to fetch the "full" URI.
$full_uri = $uri->get(true);

// the $full_uri string is:
// https://example.com/something/else/entirely/another.php?baz=zab&zim=gir#anchor

This class has a number of public properties, all related to the parsed URI processed by Solar_Uri::set(). They are ...

Name Type Description
scheme string | The scheme protocol; e.g.: http, https, ftp, mailto
host string | The host name; e.g.: example.com
port string | The port number
user string | The username for the URI
pass string | The password for the URI
path array | A sequential array of the path elements
format string | The filename-extension indicating the file format
query array | An associative array of the query terms
fragment string | The anchor or page fragment being addressed

As an example, the following URI would parse into these properties:


scheme   => 'http'
host     => 'example.com'
port     => '8080'
user     => 'anonymous'
pass     => 'guest'
path     => array('foo', 'bar')
format   => 'xml'
query    => array('baz' => 'dib')
fragment => 'anchor'


This class is part of the Solar_Uri package.


Configuration Keys

  • host: A host to use as default. Generally needed only for specific URI subclasses, for example Solar_Uri_Public.

  • path: A path prefix. Generally needed only for specific URI subclasses, for example Solar_Uri_Action.

  • uri: Calls set() with this URI string at construct-time, instead of loading from the current URI.



Public Properties

These are all the public properties in the Solar_Uri class.

You can also view the list of all public, protected, and private properties.


The dot-format extension of the last path element (for example, the "rss" in "feed.rss").


The fragment portion (for example, the "foo" in "#foo").


The host specification (for example, 'example.com').


The password, if any.


The path portion (for example, 'path/to/index.php').


The port number (for example, '80').


The scheme (for example 'http' or 'https').


The username, if any.

Public Methods

These are all the public methods in the Solar_Uri class.

You can also view the list of all public, protected, and private methods.




Default destructor; does nothing other than provide a safe fallback for calls to parent::__destruct().


Implements access to $_query by reference so that it appears to be a public $query property.


Implements the virtual $query property.


Converts the URI object to a string and returns it.


Convenience method for getting a dump the whole object, or one of its properties, or an external variable.


Returns a URI based on the object properties.


Returns the path array as a string, including the format.


Returns the query portion as a string.


Looks up class-specific locale strings based on a key.


Returns a URI based on the specified string.


Sets properties from a specified URI.


Sets the Solar_Uri::$path array from a string.


Sets the query string in the URI, for Solar_Uri::getQuery() and Solar_Uri::$query.