Contributed by
Samuel Roze
in #25178.

在 Symfony 3.4 和 4.0 中,我们添加了一种可能性,即把定义在 controller 类的类级 @Route annotation 中的 name 选项值作为 控制器内全部路由的前缀。下例中,路由名称将会是 blog_indexblog_post:

1
2
3
4
5
6
7
8
9
10
11
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
 
/** @Route("/blog", name="blog_") */
class BlogController extends Controller
{
    /** @Route("/", name="index") */
    public function indexAction() { ... }
 
    /** @Route("/posts/{slug}", name="post") */
    public function showAction(Post $post) { ... }
}

在 Symfony 4.1 中,我们通过添加全新的 name_prefix 选项而改进了此项功能,以便对那些从配置文件中导入的路由,施以前缀。这将能够,比如,导入一个给定的文件许多次,同时调整某些第三方类库/bundle的路由名称:

1
2
3
4
5
6
7
8
9
10
11
app:
    resource: ../controller/routing.yaml

api:
    resource: ../controller/routing.yaml
    # this prefix is added to all the action route names
    # 这个前缀将被添加到所有action的路由name中
    name_prefix: api_
    # this prefix is added to all the action URLs
    # 这个前缀将被添加到所有action的URL中
    prefix: /api

若使用 XML 格式,上述配置将是:

1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" encoding="UTF-8" ?>
<routes xmlns="http://symfony.com/schema/routing"
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://symfony.com/schema/routing
        http://symfony.com/schema/routing/routing-1.0.xsd">
 
    <import resource="../controller/routing.xml" />
    <import resource="../controller/routing.xml" prefix="/api" name-prefix="api_" />
 
</routes>