[英]Symfony 4 global route prefix
我在 Symfony 4 应用程序中找不到有关全局路由前缀的任何信息。 我发现的唯一一件事是用@route
注释控制器。 但是我不使用注释,我需要所有控制器都具有相同的前缀。
现在我可以在 S3 中的app/config/routing.yml
文件中这样做:
app:
resource: '@AppBundle/Controller/'
type: annotation
prefix: /foo
但是 S4 是无捆绑的,我不能这样做 - 我必须创建一个我不需要的捆绑包。
是否可以在 Symfony 4 中定义全局路由前缀,或者我最终会为每个根添加前缀/创建自定义路由加载器,特别是如果我在 YAML 中配置路由?
这适用于注释,为每个控制器提供“this/prefix”:
# file: config/routes/annotations.yaml
controllers:
resource: ../../src/Controller/
type: annotation
prefix: this/prefix
然后对于导入的路由,'this/prefix' 被应用于下面所有 FOSUserBundle 的路由(是的,我测试了它)。
# file: config/routes.yaml
fos_user:
resource: "@FOSUserBundle/Resources/config/routing/all.xml"
prefix: this/prefix
如果您不使用注释,您应该能够导入单独的路由文件(可以导入更多),将前缀应用于资源中的所有内容。 但是删除“@”符号并使用文件的相对路径。 'this/prefix' 的值可以配置为服务容器参数,请看这里: http : //symfony.com/doc/current/routing/service_container_parameters.html
我可能不理解这个问题,因为我不知道你为什么要在你的应用程序中使用全局前缀。 即使您使用的是 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
bin/控制台调试:路由器会产生
blog_show ANY ANY ANY /blog/show
blog_list ANY ANY ANY /blog/list
但同样,我怀疑你是在要求别的东西。 也许您可以为您的问题添加一个示例?
有几种方法可以实现任何路由的前缀。 它们的不同主要在于它们所针对的路线类型。
对于由注释定义的路由,您需要编辑config/routes/annotations.yaml
并将prefix: your-prefix
放在那里prefix: your-prefix
键值对。
对于YAML 列表定义的路由,您需要编辑config/routes.yaml
并将其放在新的路由prefix: your-prefix
键值对和resource: "routes/routes-that-you-want-to-be-prefixed.yaml"
并创建包含所有routes/routes-that-you-want-to-be-prefixed.yaml
的文件routes/routes-that-you-want-to-be-prefixed.yaml
config/routes.yaml
然后从config/routes.yaml
删除所有路由,除了使用resource: "routes/routes-that-you-want-to-be-prefixed.yaml"
。
如果您很着急并想检查前缀,您也可以使用快速而肮脏的方法。 编辑src/Kernel.php
并将所有$routes->import(..)
后缀$routes->import(..)
->prefix('your-prefix)
(无需更改任何路由文件)
我用一些示例代码示例写了一个全面的描述作为这个问题的答案: Running Symfony 5 with reverse proxy in subdirectory
示例代码片段已经针对Symfony 4.4和Symfony 5.1进行了测试,并且没有任何问题。
我有同样的问题,无法使用 yaml 配置解决它,但我让它在类的顶部添加一个注释,如下所示:
/**
*
* Rest\Route("/api")
*/
class TestController extends FosRestController
{
/**
* @Rest\Route("/test", name="tm_test")
* @Method({"GET"})
*/
public function testAction()
{
...
}
}
这将为testAction()
生成一个路由/api/test
看看这篇文章: https : //symfony.com/blog/new-in-symfony-3-4-prefix-all-controller-route-names
希望它有帮助
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.