Build urls to resources in your app

1.2.0 2015-02-17 15:24 UTC

This package is auto-updated.

Last update: 2024-05-29 02:51:17 UTC


Build Status Total Downloads Latest Stable Version

Build urls to resources in your app. Available as a standalone library or as a Plates Extension.

This library uses rize\UriTemplate for the heavy lifting of expanding urls with additional functionality to make it easier to build urls to resources within your application.


Creating an instance of the url builder.

Get an instance of the url builder. If you pass no constructor values, it will base all urls on the root-relative path to the currently executing script using $_SERVER['SCRIPT_NAME'].

$builder = new \werx\Url\Builder;

You can also provide a base url and script name.

$builder = new \werx\Url\Builder('/path/to/app/', 'index.php');

If you set a fully qualified url in the constructor, it will be used when building urls.

$builder = new \werx\Url\Builder('http://example.com/path/to/app/', 'index.php');

Building URLs.

Simple pattern replacement with a single id

$url = $builder->action('home/details/{id}', 5);
var_dump($url); # /path/to/app/index.php/home/details/5

Multiple pattern replacements

$url = $builder->action('home/{action}/{id}', ['action' => 'details', 'id' => 5]);
var_dump($url); # /path/to/app/index.php/home/details/5

Convert an array to a query string.

$url = $builder->query('home/search', ['name' => 'Josh', 'state' => 'AR']);
var_dump($url); # /path/to/app/index.php/home/search?name=Josh&state=AR

Build an url to a static resource in your application.

$url = $builder->asset('images/logo.png');
var_dump($url); # /path/to/app/images/logo.png

Plates Extension

This library includes an extension that allows it to be used within Plates Templates.

In your controller...

$engine = new \League\Plates\Engine('/path/to/templates');
$ext = new \werx\Url\Extensions\Plates;

$template = new \League\Plates\Template($engine);
$output = $template->render('home');

Then in your view, you can call any of the werx\Url\Builder methods via $this->url()->methodtocall().

<a href="<?=$this->url()->action(home/details/{id}, 5)?>">Details</a>
<img src="<?=$this->url()->asset('images/logo.png')?>"/>


This package is installable and autoloadable via Composer as werx/url. If you aren't familiar with the Composer Dependency Manager for PHP, you should read this first.

$ composer require werx/url --prefer-dist


Unit Testing

$ vendor/bin/phpunit

Coding Standards

This library uses PHP_CodeSniffer to ensure coding standards are followed.

I have adopted the PHP FIG PSR-2 Coding Standard EXCEPT for the tabs vs spaces for indentation rule. PSR-2 says 4 spaces. I use tabs. No discussion.

To support indenting with tabs, I've defined a custom PSR-2 ruleset that extends the standard PSR-2 ruleset used by PHP_CodeSniffer. You can find this ruleset in the root of this project at PSR2Tabs.xml

Executing the codesniffer command from the root of this project to run the sniffer using these custom rules.

$ ./codesniffer