2016-10-31 24 views
1

Iルーティングとコントローラを作り、デフォルト値、コントローラのコードを試みた:私はhttp://localhost:8000/lucky/number/に行くときのsymfony 3.1ルーティング{プレースホルダ}デフォルト値

class luckynumber extends Controller 
{ 
    /** 
    * Matches /lucky/number exactly 
    * 
    * @Route("/lucky/number", name="lucky_number") 
    */ 
    public function numberAction() 
    { 
     $number = rand(1, 100); 

     return $this->render('lucky/number.html.twig', array('number' => $number)); 
    } 

    /** 
    * Matches /lucky/number/{choised} exactly 
    * 
    * @Route("/lucky/number/{choised}", name="choised_number", requirements={"choised":"\d+"}) 
    */ 
    public function undernumberAction(Request $request, $choised = 7) 
    { 
     $numberList = array(); 
     for($i = 0; $i < $choised; $i++) { 
      $numberList[] = rand(1,100); 
     } 

     $final_list = implode('-', $numberList); 

     return $this->render('lucky/choised_number.html.twig', array(
      'number' => $choised, 
      'list' => $final_list 
     )); 
    } 
} 

に問題がある、それは私に指示します:「GET /幸運/数字/」の経路はありません ここに何が間違っていますか?あなたはいないメソッドの引数には、@Route()注釈オプションにデフォルト値を追加する必要が

<ul> 
<li><a href="/lucky/number">lucky number</a></li> 
<li><a href="/lucky/number/7">choised lucky number </a></li> 
</ul> 
+1

'/ラッキー/ number':それは(デフォルト値を持つ)第2の経路と一致するための有効な方法です最初のルートが最初に同じパス(最初のルートを無効にしてテスト)に一致するため、両方のアクションをマージしてその結果を得ることができます。 – yceruto

+0

私はそれを試しました、今私が** /ラッキー/数字**を取得しようとすると**デフォルト値で動作しますが、**/lucky/number/**を呼び出すと、同じエラーが再び発生しますか? –

+1

はい、 '/ lucky/number /'はデフォルト値で動作するための有効なパスではありません。ワイルドカード要件:この場合 "\ d +"はスラッシュ "/ ..."の後に数字が来るので一致しません。 '/ lucky/number'を使うべきですが、これは最初の一つのルートにもマッチするので、最初に勝ったので変更が必要です。 – yceruto

答えて

0

私はこの問題を回避見つけた唯一の方法は、小枝ファイルからであり、それはこのような何かを行きます。

@Route("/lucky/number/{choised}", name="choised_number", requirements={"choised":"\d+"}, defaults={"choised":7})

詳細については@Route and @Methodドキュメントを参照してください。

1

+0

それでも同じエラーが発生しました –

+0

http://www.sobstel.org/blog/symfony-routing-with-and-without-trailing-slashes/ここに記載されているように、スラッシュの問題が発生していないことを確認してください。私の答えのルート注釈は私自身のテストでは期待通りに機能しますが、Symfonyルーティングのために末尾のスラッシュで終わるURLにアクセスすることはできません。 – Malcolm

+0

この記事はsymfony 2に関するもので、symfony 3.1を使用しています –

0

あなたはこのように2つの注釈を追加することができます。

/** 
* @Route("/blog", defaults={"page"=1}) 
* @Route("/blog/{$page}", name="blog_list", requirements={"page"="|d+"}) 
*/ 
public function list($page) 
{ 
    return new Response('<html><body>Welcome to my Blog'.$page.'</body></html>'); 
} 

を私は使用していますのSymfony 3.4

関連する問題