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.