Генерация URL и путей
Phalcon\Mvc\Url — компонент, отвечающий за генерацию URL в приложении Phalcon. Он способен генерировать независимые URL на основе маршрутов.
Установка базового URI
В зависимости от того, в каком каталоге корневого каталога документа установлено ваше приложение, оно может иметь базовый URI или нет.
Например, если ваш корневой каталог документа — /var/www/htdocs, а ваше приложение установлено в /var/www/htdocs/invo, то ваш baseUri будет /invo/. Если вы используете VirtualHost или ваше приложение установлено в корневом каталоге документа, то ваш baseUri — /. Выполните следующий код, чтобы узнать базовый URI, обнаруженный Phalcon:
use Phalcon\Mvc\Url; $url = new Url(); echo $url->getBaseUri();
По умолчанию Phalcon автоматически может обнаружить ваш baseUri, но если вы хотите повысить производительность своего приложения, рекомендуется установить его вручную:
use Phalcon\Mvc\Url;
$url = new Url();
// Setting a relative base URI
$url->setBaseUri("/invo/");
// Setting a full domain as base URI
$url->setBaseUri("//my.domain.com/");
// Setting a full domain as base URI
$url->setBaseUri("http://my.domain.com/my-app/");
Обычно этот компонент должен быть зарегистрирован в контейнере Dependency Injector, поэтому вы можете настроить его там:
use Phalcon\Mvc\Url;
$di->set(
"url",
function () {
$url = new Url();
$url->setBaseUri("/invo/");
return $url;
}
);
Генерация URI
Если вы используете Router с его стандартным поведением. Ваше приложение способно сопоставлять маршруты на основе следующего шаблона: /:controller/:action/:params. Соответственно, легко создать маршруты, удовлетворяющие этому шаблону (или любому другому шаблону, определенному в маршрутизаторе), передавая строку в метод «get»:
<?php echo $url->get("products/save"); ?>
Обратите внимание, что не требуется предварять базовый URI. Если у вас есть именованные маршруты, вы можете легко изменить их, создавая их динамически. Например, если у вас есть следующий маршрут:
$router->add(
"/blog/{year}/{month}/{title}",
[
"controller" => "posts",
"action" => "show",
]
)->setName("show-post");
URL можно сгенерировать следующим образом:
// This produces: /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:
use Phalcon\Mvc\Url;
$url = new Url();
// Pass the URI in $_GET["_url"]
$url->setBaseUri("/invo/index.php?_url=/");
// This produce: /invo/index.php?_url=/products/save
echo $url->get("products/save");
Вы также можете использовать %%%CODE_BLOCK_7%%:
use Phalcon\Mvc\Url;
$url = new Url();
// Pass the URI in $_GET["_url"]
$url->setBaseUri("/invo/index.php?_url=/");
// Pass the URI using $_SERVER["REQUEST_URI"]
$url->setBaseUri("/invo/index.php/");
В этом случае необходимо вручную обработать необходимый URI в маршрутизаторе:
use Phalcon\Mvc\Router; $router = new Router(); // ... Define routes $uri = str_replace($_SERVER["SCRIPT_NAME"], "", $_SERVER["REQUEST_URI"]); $router->handle($uri);
Сгенерированные маршруты будут выглядеть так:
// This produce: /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 для статических ресурсов в приложении:
use Phalcon\Mvc\Url;
$url = new Url();
// Dynamic URIs are
$url->setBaseUri("/");
// Static resources go through a CDN
$url->setStaticBaseUri("http://static.mywebsite.com/");
Phalcon\Tag будет запрашивать как динамические, так и статические URI с использованием этого компонента.
Реализация собственного генератора URL
Интерфейс Phalcon\Mvc\UrlInterface должен быть реализован для создания собственного генератора URL, заменяющего предоставленный Phalcon.
© 2011–2017 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/latest/reference/url.html