Генерация URL и путей
Phalcon\Mvc\Url — это компонент, отвечающий за генерацию URL в приложении Phalcon. Он способен генерировать независимые URL на основе маршрутов.
Установка базового URI
В зависимости от того, в каком каталоге корневого каталога документа установлено ваше приложение, у него может быть базовый URI или нет.
Например, если корневой каталог документа — /var/www/htdocs, а ваше приложение установлено в /var/www/htdocs/invo, то ваш baseUri будет /invo/. Если вы используете VirtualHost или ваше приложение установлено в корневом каталоге документа, то ваш baseUri — /. Выполните следующий код, чтобы узнать базовый URI, обнаруженный Phalcon:
$url = new Phalcon\Mvc\Url(); echo $url->getBaseUri();
По умолчанию Phalcon может автоматически обнаружить ваш baseUri, но если вы хотите повысить производительность своего приложения, рекомендуется установить его вручную:
$url = new Phalcon\Mvc\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, поэтому вы можете установить его там:
$di->set('url', function(){
$url = new Phalcon\Mvc\Url();
$url->setBaseUri('/invo/');
return $url;
});
Генерация URI
Если вы используете Router со своим поведением по умолчанию. Ваше приложение способно сопоставлять маршруты на основе следующего шаблона: /:controller/:action/:params. Соответственно, легко создавать маршруты, удовлетворяющие этому шаблону (или любому другому шаблону, определенному в маршрутизаторе), передавая строку методу «get»:
<?php echo $url->get("products/save") ?>
Обратите внимание, что нет необходимости добавлять базовый URI. Если у вас есть именованные маршруты, вы можете легко изменить их, создавая их динамически. Например, если у вас есть следующий маршрут:
$route->add('/blog/{year}/{month}/{title}', array(
'controller' => 'posts',
'action' => 'show'
))->setName('show-post');
URL можно сгенерировать следующим образом:
//This produces: /blog/2012/01/some-blog-post
$url->get(array(
'for' => 'show-post',
'year' => 2012,
'month' => '01',
'title' => 'some-blog-post'
));
Генерация URL без Mod-Rewrite
Вы можете использовать этот компонент также для создания URL без mod-rewrite:
$url = new Phalcon\Mvc\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");
Вы также можете использовать $_SERVER[“REQUEST_URI”]:
$url = new Phalcon\Mvc\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 в маршрутизаторе:
$router = new Phalcon\Mvc\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 для статических ресурсов в приложении:
$url = new Phalcon\Mvc\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–2016 Phalcon Framework Team
Licensed under the Creative Commons Attribution License 3.0.
https://docs.phalconphp.com/en/2.0.0/reference/url.html