簡體   English   中英

Symfony 4 全局路由前綴

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM