2017-05-05 33 views
1

我有一個控制器有兩個動作和類似的URL模式,但我無法得到它的工作。以下只是一個小例子。我想要做的是帶有(可選)分頁(/ test/[1])的listAction和帶有字母數字ID(/ test/abc)的showAction。Symfony路由可選分頁(/測試/ [1])與slug(/測試/ abc)

class MyController extends Controller 
{ 
    /** 
    * @Route("/test/{var}", requirements={"var" = "\d+"}, defaults={"var"=1}, name="app_testint") 
    * @return Response 
    */ 
    public function testIntAction($var) 
    { 
     return new Response(__METHOD__ . ' var=' . $var); 
    } 

    /** 
    * @Route("/test/{var}", requirements={"var" = "\s+"}, name="app_teststr") 
    * @return Response 
    */ 
    public function testStrAction($var) 
    { 
     return new Response(__METHOD__ . ' var=' . $var); 
    } 
} 

隨着我的配置,我只能打電話與數值的URL。帶out和字符串的路由不起作用。我怎樣才能做到這一點?

回答

1

您的第二條路線reg-ex無效應該是\w+以匹配字符串。否則,你正試圖與空格匹配。

/** 
* @Route("/test/{var}", requirements={"var" = "\w+"}, name="app_teststr") 
* @return Response 
*/ 
public function testStrAction($var) { 
    return new Response(__METHOD__ . ' var=' . $var); 
} 
1

嘗試使用:而不是=標誌內的要求和默認選項:

/** 
* @Route("/test/{var}", requirements={"var": "\d+"}, defaults={"var": 1}, name="app_testint") 
* @return Response 
*/ 

/** 
* @Route("/test/{var}", requirements={"var": "\s+"}, name="app_teststr") 
* @return Response 
*/ 
1
/** 
* @Route("/test/{var}", requirements={"var" = "\d+"}, defaults={"var"=1}, name="app_testint") 
* @return Response 
*/ 
public function testIntAction($var) 
{ 
    return new Response(__METHOD__ . ' var=' . $var); 
} 

/** 
* @Route("/test/{var}", requirements={"var" = "[A-Za-z]+"}, name="app_teststr") 
* @return Response 
*/ 
public function testStrAction($var) 
{ 
    return new Response(__METHOD__ . ' var=' . $var); 
} 

不能與縮進出於某種原因取勝。但是我用A-Za-z取代了你的ajax,它爲我工作。

1

現在我找到了一個適合我的工作解決方案。好的,也許這是一種解決方法...

class MyController extends Controller 
{ 
    /** 
    * @Route("/test/", defaults={"var":1}) 
    * @Route("/test/{var}", requirements={"var":"\d+"}, defaults={"var":null}, name="app_testint") 
    * @return Response 
    */ 
    public function testIntAction($var) 
    { 
     return new Response(__METHOD__ . ' var=' . $var); 
    } 

    /** 
    * @Route("/test/{var}", name="app_teststr") 
    * @return Response 
    */ 
    public function testStrAction($var) 
    { 
     return new Response(__METHOD__ . ' var=' . $var); 
    } 
}