簡體   English   中英

Symfony 4 中使用注釋路由時的回退路由

[英]Fallback route in Symfony 4 while using annotation routing

我目前正在 Symfony 4 應用程序中通過控制器注釋使用路由。

我試圖將所有與現有注釋(例如http://example.com/route-that-isnt-defined )不匹配的請求路由到特定的控制器和函數(例如具有邏輯的DefaultController::dynamicPage()以確定我是否應該提供內容或觸發NotFoundHttpException )。

DefaultController::dynamicPage()的路由定義為@Route("/{param}")在所有其他定義的路由之前並攔截,使它們無法訪問。

我已經為 Symfony 3嘗試了這個解決方案,不知道它是否會起作用,但被困在“AppBundle”應該指的是什么上,因為它不是我的項目中存在的東西。

目前,我的 routes.yaml 中只有一個用於索引的路由,因為所有其他命名路由都是通過注釋定義的:

index:
    path: /
    controller: App\Controller\DefaultController::index

我正在尋找在 Symfony 4 中實現鏈接 Symfony 3 解決方案的正確方法,或者在不做一些復雜的事情的情況下實現我想要的路由的替代方法,例如擴展異常控制器和將路由功能插入NotFoundHttpException

您可以嘗試添加一個內核事件偵聽器來處理kernel.exception event ,對於異常是NotFoundHttpException情況,您將返回自定義響應而不是 404 Not Found 頁面。

這可能非常靈活,因為您可以在此類偵聽器中實現任何自定義邏輯。

我還沒有轉移到 sf4,但是這個問題不只是與正在評估的路線的順序有關嗎? 即您可以嘗試通過添加顯式定義來加載 routes.yml 中的 DefaultController.php 注釋作為最后一個元素? 即這樣的事情應該可以解決問題(至少在 sf2.8 中有效):

app_annotations:
    resource: '@MyBundle/Controller/'
    type:     annotation

fallback_annotations:
    resource: '@MyBundle/Controller/DefaultController.php'
    type:     annotation

或者如果這在 sf4 中不起作用(如果它自動加載帶有其他邏輯的控制器路由注釋),另一種解決方法是僅命名此回退控制器,以便它按字母順序成為最后一個(因此那里的路由應該最后進行評估)。

從你的評論我“聞到”你有一些與你項目的當前配置不兼容的作曲家包。 您是從 SF3 升級到 SF4 嗎?

我也有這個InvalidArguementException

"The "App" (from the _controller value "App:Default:index") does not exist 
or is not enabled in your kernel...

原來我有一個不受支持的軟件包easycorp/easyadmin-bundle版本^3.1 ,我通過它修復了它

  1. 刪除vendor文件夾
  2. 刪除composer.lock文件。
  3. 在 composer.json 中明確指定我的項目支持的版本^2.3
  4. 運行 composer install ... 等等!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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