[英]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
,我通過它修復了它
vendor
文件夾composer.lock
文件。^2.3
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.