[英]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.