Создание 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.