Symfony的4个全球路由前缀

sup*_*r.t 1 php symfony symfony-routing symfony4

我在Symfony 4应用程序中找不到有关全局路由前缀的任何信息。我发现的唯一一件事就是用注释控制器@route。但是我不使用注释,并且我需要所有控制器具有相同的前缀。

现在,我可以在S3中像在app/config/routing.yml文件中这样:

app:
    resource: '@AppBundle/Controller/'
    type: annotation
    prefix: /foo
Run Code Online (Sandbox Code Playgroud)

但是S4是没有捆绑的,我不能做同样的事情-我将不得不创建一个不需要的捆绑包。

是否有可能在Symfony 4中完全定义全局路由前缀,否则我最终将为每个单个根前缀/创建自定义路由加载器,特别是如果我在YAML中配置路由时呢?

Cer*_*rad 6

我可能不明白这个问题,因为我不知道你为什么要在你的应用程序中使用全局前缀。即使您使用的是 yaml 并且没有包,您也可以在导入路由文件时设置前缀。

# config/routes.yaml
blog:
    resource: '../src/Resources/config/routes/blog.yaml'
    prefix: blog

# src/Resources/config/routes/blog.yaml
blog_show:
    path: /show
    controller: App\Controller\BlogController::show

blog_list:
    path: /list
    controller: App\Controller\BlogController::list
Run Code Online (Sandbox Code Playgroud)

bin/控制台调试:路由器会产生

blog_show          ANY      ANY      ANY    /blog/show     
blog_list          ANY      ANY      ANY    /blog/list  
Run Code Online (Sandbox Code Playgroud)

但同样,我怀疑你是在要求别的东西。也许您可以为您的问题添加一个示例?


Arl*_*Hix 6

这适用注释,为每个控制器赋予“ this / prefix”:

# file: config/routes/annotations.yaml

controllers:
    resource: ../../src/Controller/
    type: annotation
    prefix: this/prefix
Run Code Online (Sandbox Code Playgroud)

然后对于导入的路由,“ this / prefix”将应用于以下所有FOSUserBundle的路由(是的,我已经对其进行了测试)。

# file: config/routes.yaml

fos_user:
    resource: "@FOSUserBundle/Resources/config/routing/all.xml"
    prefix: this/prefix
Run Code Online (Sandbox Code Playgroud)

如果您不使用注释,则应该能够导入单独的路由文件(该文件可以导入更多文件),并将前缀应用于资源中的所有内容。但是删除“ @”符号,并使用文件的相对路径。可以将“ this / prefix”的值配置为“ 服务容器参数”,请参见此处:http : //symfony.com/doc/current/routing/service_container_parameters.html