2012-02-26 12 views
1

現在、Symfony2でルーティングオプションを設定しようとしています。/cms/cms/role/viewにルーティングされます。しかし、デフォルトの受け渡しは適切に機能していないようです。symfony2ルーティングのデフォルトが正しく渡されない

/src/MyProject/CMSBundle/Resources/config/routing.yml

MyProjectCMS_specific: 
pattern: /cms/{page}/{option} 
defaults: { _controller: MyProjectCMSBundle:Main:index, page: role, option: view } 
requirements: 
    _method: GET 

/src/MyProject/CMSBundle/Controller/MainController.phpは

<?php 
    namespace MyProject\CMSBundle\Controller; 

    use Symfony\Bundle\FrameworkBundle\Controller\Controller; 
    use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 

    class MainController extends Controller 
    { 
     public function indexAction($page, $option) 
     { 
      $response = null; 

      /* Switch statement that determines the page to be loaded. */ 

      return $response; 
     } 

    } 
?> 

問題があるときにI私がしようとした場合、しかし、

Controller "MyProject\CMSBundle\Controller\MainController::indexAction()" requires that you provide a value for the "$page" argument (because there is no default value or because there is a non optional argument after this one). 
500 Internal Server Error - RuntimeException 

: `localhost /をapp_dev.php/CMS'に行くことにしようと、それは私に次のエラーを与えますlocalhost/app_dev.php/cms/roleまたはlocalhost/app_dev.php/cms/role/viewにアクセスすると、正しいページが表示されます。私は/cmsへのデフォルトルートを追加しようとしましたが、それでも私には同じエラーが表示されます。これはどのように可能ですか?これをどのように修正できますか?

ありがとうございます。

+0

まず、yamlによるルーティングと注釈によるルーティングのどちらかを決定する必要があります。あなたの設定に応じて、1つは使用されず、読者だけを混乱させ、コードを混乱させます! – Sgoettschkes

+0

申し訳ありませんが、あなたは正しいです。私はそれが差をつけるかどうか試したので追加しましたが、それはしませんでした。私は今それを削除しました。 – Rex

答えて

2

私はあなたが書いたと

public function indexAction($page = "role", $option = "view") 

を多分あなたはそれを試してみて、私たちに言うことができるどのような違いがあるのか​​分かりません。

+0

私はrouting.ymlにデフォルトを設定しました。 Symfony2のマニュアルによれば、それはうまくいくはずですが、何も引数を与えなければ動作しません。とにかく、あなたの提案は実際に私の問題を解決しました。どのように私はこれを修正することが好きではないが、何よりも優れています。 ;) – Rex

+0

確かに、それは説明ではなく、ただの回避策です。しかし、私はそれが匿名の、説明できないdownvoteに値するとは思わない... – greg0ire

+0

私の永遠の感謝は十分でなければならない。 – Rex