Spec-Zone.ru › Phalcon 2

Генерация 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API