2017-05-05 6 views
1

2つのアクションと同様のURLパターンを持つコントローラがありますが、動作させることはできません。以下はほんの一例です。私がしたいのは、(オプション)ページネーション(/ test/[1])と英数字ID(/ test/abc)のshowActionを持つlistActionです。symfonyルーティングオプションのページング(/ test/[1])対slug(/ test/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は数値でしか呼び出せません。文字列のないルートは機能しません。どうすればこれを達成できますか?

答えて

1

2番目のルートの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); 
} 

が何らかの理由でインデントして勝つことができません。しかし、私はあなたのAjaxをA-Za-zに置き換えました。

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); 
    } 
}