Source 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 action and asset 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