Spec-Zone.ru › Phalcon 3

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

Spec-Zone.ru

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