我試圖在重寫的控制器類中創建一個新的控制器函式,但它沒有按預期作業。
我有一個通用捆綁包,用于許多客戶。有時,當客戶端需要特定功能時,我會為客戶端包中的公共控制器創建一個覆寫。
這是我的通用捆綁控制器代碼。
class FrontController extends Controller
{
// This is the controller in my common bundle
/**
* @Route("/foo/{id}", name="front_view")
*/
public function viewAction(
string $id,
Request $request
){
// My Controller code
}
}
這是我為客戶端包覆寫的控制器代碼。
class ClientFrontController extends FrontController
{
// I have 2 controller methods in this class
// First method overrides the FrontController's viewAction method
// This works fine
/**
* @Route("/foo/{id}", name="front_view")
*/
public function viewAction(
string $id,
Request $request
){
// My Controller code
}
//Second method
//This is the problem
/**
* @Route("/foo/bar", name="foo_bar")
*/
public function fooBarAction(
Request $request
){
// My Controller code
}
}
我現在面臨的問題是,當我瀏覽到/foo/bar的路線,它關系到/foo/{id}在重寫的方法ClientFrontController。
為什么會這樣?我怎樣才能使兩條路線都有效?
uj5u.com熱心網友回復:
路由順序是相關的。
/foo/bar包含在/foo/{id}. 在評估請求時,/foo/bar匹配/foo/{id}(與idis bar)并且由于它更早宣告/讀取,front_view處理請求。
如果您使用的是 Symfony < 5.1,請嘗試移動路由(以便foo_bar早于front_view)。或者甚至改變路線,以便沒有重疊。
如果您使用的是 Symfony 5.1 ,您現在可以priority在路由注釋/屬性上使用。閱讀此處的公告和此處的檔案。
class ClientFrontController extends FrontController
{
/**
* @Route("/foo/{id}", name="front_view")
*/
public function viewAction(string $id, Request $request)
{
// My Controller code
}
/**
* @Route("/foo/bar", priority=10, name="foo_bar")
*/
public function fooBarAction(Request $request)
{
// My Controller code
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/380548.html
標籤:php symfony 注释 symfony-路由
上一篇:表格中的可選日期
