Новое в Symfony 3.2: Улучшения маршрутизации

  • Добавлена поддержка URL fragments
  • Добавлена поддержка значений массива в XML-маршрутах

Добавлена поддержка URL fragments

Идентификатор фрагмента является необязательная последняя часть URL, который начинается с символа # и используется для идентификации части документа. Этот URL элемент становится все более популярным, так как некоторые приложения используют его в качестве механизма навигации. По этой причине, Symfony 3.2 позволяет определить фрагмент при создании URL благодаря новому зарезервированному параметру маршрутизации под названием _fragment:

// generating a regular URL (/settings)
$this->get('router')->generate('user_settings');

// generating a URL with a fragment (/settings#password)
$this->get('router')->generate('user_settings', ['_fragment' => 'password']);

Этот параметр _fragment также может быть использован при определении маршрута в любом из форматов, поддерживаемых Symfony:

/**
 * @Route("/settings", defaults={"_fragment" = "password"}, name="user_settings")
 */
public function settingsAction() { ... }

Добавлена поддержка значений массива в XML-маршрутах

XML не является одним из наиболее популярных форматов для задания маршрутов в приложениях Symfony. В дополнение к этому, ему не хватает некоторых функций из других форматов, таких как, использование массивов для определения значений маршрутизации по умолчанию:

<routes>
    <route id="blog" path="/blog/{page}">
        <default key="_controller">AppBundle:Blog:index</default>
        <!-- you can't define the type of the 'page' property and you can't
             use an array as the value of a '<default>' element -->
        <default key="page">1</default>
    </route>
</routes>

В Symfony 3.2 мы решили улучшить класс YAmlFileLoader компонента маршрутизации, чтобы иметь возможность определить тип переменной любого  <default> элемента:

<routes>
    <route id="blog" path="/blog/{page}">
        <default key="_controller">
            <string>AppBundle:Blog:index</string>
        </default>
        <default key="page">
            <int>1</int>
        </default>
    </route>
</routes>

Теперь вы можете также использовать массивы в качестве значения любого элемента <default> (используя <list> для скалярных массивов и <map> для ассоциативных массивов):

<routes>
    <route id="blog" path="/blog/{page}">
        <default key="_controller">
            <string>AppBundle:Blog:index</string>
        </default>
        <default key="page">
            <int>1</int>
        </default>
        <default key="values">
            <map>
                <bool key="public">true</bool>
                <int key="page">1</int>
                <float key="price">3.5</float>
                <string key="title">foo</string>
            </map>
        </default>
    </route>
</routes>

 

Добавить комментарий

Ваш адрес email не будет опубликован.

3 × один =