增加了对URL片段的支持 

fragment identifier(片段标识符)是指一个URL中的“可选的”最末部分,它以#符号开始,一般用来标记文档中的某一部分。这个URL元素现正激增,因为一些程序把它纳入了导航体系。因此,Symfony 3.2允许定义这个片段,当生成URL时利用全新的路由保留属性_fragment即可:

1
2
3
4
5
6
7
// generating a regular URL (/settings)
// 生成常规链接(/settings)
$this->get('router')->generate('user_settings');
 
// generating a URL with a fragment (/settings#password)
// 生成一个带有片段的链接(/settings#password)
$this->get('router')->generate('user_settings', ['_fragment' => 'password']);

这个_fragment选项也可以在Symfony支持的任何路由定义格式中使用:

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

增加了对XML路由的数组值的支持 

在定义Symfony程序的路由时,XML不是最常用的格式。除了较为冗长之外,它也缺少一些其他格式的功能,比如使用数组来定义路由中的默认取值:

1
2
3
4
5
6
7
8
9
<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 -->
        <!-- 你不能定义'page'属性的类型,也不能使用数组作为某个'<default>'元素的值 -->
        <default key="page">1</default>
    </route>
</routes>

在Symfony 3.2中我们决定改进路由组件中的XmlFileLoader类,以允许定义任何一个default元素的变量类型:

1
2
3
4
5
6
7
8
9
10
<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元素的值了(对标量数组(scalar array)使用list,而对关联数组(associative array)使用map):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<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>