09 URL
Создание URL-адресов и путей
Phalcon\Mvc\Url является компонентом, ответственным за создание URL-адресов в приложении Phalcon. Он способен производить независимые URL-адреса на основе маршрутов.
Установка базового URI
В зависимости от того, какой каталог корневого документа вашего приложения установлен, он может иметь базовый URI или нет.
Например, если ваша корневая папка /var/www/htdocs
и приложение устанавливается в /var/www/htdocs/invo
, то ваш baseUri будет /invo/
. Если вы используете VirtualHost или ваше приложение установлено в корневом каталоге документа, то ваш baseUri - /
. Выполните следующий код, чтобы узнать базовый URI, обнаруженный Phalcon:
<?php use Phalcon\Mvc\Url; $url = new Url(); echo $url->getBaseUri();
По умолчанию Phalcon автоматически может обнаружить ваш baseUri, но если вы хотите повысить производительность своего приложения, рекомендуется настроить его вручную:
<?php use Phalcon\Mvc\Url; $url = new Url(); // Установка относительного базового URI $url->setBaseUri('/invo/'); // Установка полного домена в качестве базового URI $url->setBaseUri('//my.domain.com/'); // Установка полного домена в качестве базового URI $url->setBaseUri('http://my.domain.com/my-app/');
Обычно этот компонент должен быть зарегистрирован в контейнере Injector Dependency, поэтому вы можете его настроить там:
<?php use Phalcon\Mvc\Url; $di->set( 'url', function () { $url = new Url(); $url->setBaseUri('/invo/'); return $url; } );
Создание URI
Если вы используете маршрутизатор с поведением по умолчанию, ваше приложение может сопоставлять маршруты на основе следующего шаблона:
Соответственно, легко создавать маршруты, которые удовлетворяют этому шаблону (или любому другому шаблону, определенному в маршрутизаторе), передавая строку методу get
:
<?php echo $url->get('products/save'); ?>
Обратите внимание, что нет необходимости добавлять базовый URI. Если вы назвали маршруты, вы можете легко изменить его, создавая его динамически. Например, если у вас есть следующий маршрут:
<?php $router ->add( '/blog/{year}/{month}/{title}', [ 'controller' => 'posts', 'action' => 'show', ] ) ->setName('show-post');
URL-адрес может быть сгенерирован следующим образом:
<?php // Это производит: /blog/2015/01/some-blog-post $url->get( [ 'for' => 'show-post', 'year' => '2015', 'month' => '01', 'title' => 'some-blog-post', ] );
Создание URL без mod_rewrite
Вы также можете использовать этот компонент для создания URL-адресов без mod_rewrite:
<?php use Phalcon\Mvc\Url; $url = new Url(); // Передать URI в $_GET['_url'] $url->setBaseUri('/invo/index.php?_url=/'); // Это дает: /invo/index.php?_url=/products/save echo $url->get('products/save');
Вы также можете использовать $_SERVER['REQUEST_URI']
:
<?php use Phalcon\Mvc\Url; $url = new Url(); // Передать URI в $_GET['_url'] $url->setBaseUri('/invo/index.php?_url=/'); // Передать URI, используя $_SERVER['REQUEST_URI'] $url->setBaseUri('/invo/index.php/');
В этом случае необходимо вручную обработать требуемый URI в маршрутизаторе:
<?php use Phalcon\Mvc\Router; $router = new Router(); // ... Define routes $uri = str_replace($_SERVER['SCRIPT_NAME'], '', $_SERVER['REQUEST_URI']); $router->handle($uri);
Произведенные маршруты будут выглядеть так:
<?php // Это дает: /invo/index.php/products/save echo $url->get('products/save');
Создание URL-адресов от Volt
Функция url
доступна в volt
для генерации URL с помощью этого компонента:
<a href='{{ url('posts/edit/1002') }}'>Edit</a>
Создание статических маршрутов:
<link rel='stylesheet' href='{{ static_url('css/style.css') }}' type='text/css' />
Статические и динамические URI
Этот компонент позволяет настроить другой базовый URI для статических ресурсов в приложении:
<?php use Phalcon\Mvc\Url; $url = new Url(); // Динамические URI $url->setBaseUri('/'); // Статические ресурсы проходят через CDN $url->setStaticBaseUri('http://static.mywebsite.com/');
Phalcon\Tag будет запрашивать динамические и статические URI с помощью этого компонента.
Реализация собственного генератора URL
Интерфейс Phalcon\Mvc\UrlInterface должен быть реализован для создания собственного генератора URL-адресов, заменяющего тот, который предоставляется Phalcon.