2012-04-10 11 views
7

私のアプリケーションのすべてのURLの末尾にスラッシュを付ける。しかし、理由はURLパターンの末尾にスラッシュで一致していない「/ fooの/」に要求し、Symfony2:末尾にスラッシュとオプションのパラメータを持つURL

foo_route: 
    pattern: /foo/{page}/ 
    defaults: { _controller: FooBundle:Foo:list, page: 1 } 
    requirements: 
     page: \d+ 

要求に「/ fooの/ 1 /」作業罰金:私は私のroute.ymlで次のルートを持っています。

ルートを後続のスラッシュとオプションのパラメータで定義するにはどうすればよいですか?私は2つのケースで2つの異なるルートを定義できることを知っていますが、私はそれを避けたいと思います。

+0

いただきました別のルートをhaveingそんなに悪いですか? – Gigala

答えて

1

注釈を介してコントローラを定義する方が簡単かもしれません。 route.yml

MineTestBundle: 
    resource: "@MineTestBundle/Controller/" 
    type:  annotation 

次に、あなたがあなたのコントローラで直接ルートを定義することができます。

/** 
* @Route("/foo") 
*/ 
class FooController extends Controller { 
    /** 
    * @Route("/", name="_foo_index") 
    * @Template() 
    */ 
    public function indexAction() { 
     return array(); 
    } 

    /** 
    * @Route("/{page}/", name="_foo_page") 
    * @Template() 
    */ 
    public function pageAction($page) { 
     return array('page' => $page); 
    } 
} 

は、今あなたがindexActionに来/fooにアクセスしようとしたとき、あなたは/foo/1/にアクセスするときは、pageActionに来ます。

編集:誤解のために申し訳ありません

。あなたの問題を再現しようとしました。あなたはへページのデフォルトを設定することができ、パラメータなしのルートで

foo_route: 
    pattern: /foo/{page}/ 
    defaults: { _controller: AcmeDemoBundle:Foo:list } 
    requirements: 
     name: ".+" 

foo_route_foo: 
    pattern: /foo 
    defaults: { _controller: AcmeDemoBundle:Foo:list, page: 1 } 
    requirements: 
     name: ".+" 

{ページ}:最も簡単な方法は、このようなあなたの設定で2つのルートを定義することです。

しかし、ここクックブックではそう/foo/123/234/の後に来るものすべてが変数$pageであり、あなたがあなたの機能で自分のためにそれらを分割することができますルートで/を許可するので、その可能章How to allow a "/" character in a route parameterです。代わりに、経路における末尾の円記号を排除し、0個以上の文字(*)に一致する正規表現を緩和することによって

/foo 
/foo/ 
/foo/page/1 

:別個であるが関連する場合

+0

ご意見ありがとうございますが、実際にはオプションのパラメータページでは1つのアクションしかありません。 – Gerry

+0

pageAction;)パラメータがあります。あなたの例のように同じですが、パラメータを空白のままにするとデフォルトのindexActionがあります。 – Stony

+0

いいえ、あなたは誤解しています。私は1つのルートを(オプションのパラメータで)1つの単一のアクションを指してほしい。 2つのルートや2つのアクションを作成しないようにしたいと思っています。 – Gerry

6

、次の3つのパターンを一致させることができます1以上(+)の:

foo_route: 
    pattern: /foo/{page} 
    defaults: { _controller: FooBundle:Foo:list, page: 1 } 
    requirements: 
     page: \d* 

しかしそれは一致しません/ fooの/ページ/ 1/

関連する問題