7

アプリケーション内のすべてのURLに末尾にスラッシュを付けたい。route.ymlに次のルートがあります。

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

'/ foo / 1 /'へのリクエストは正常に機能しますが、URLパターンの末尾にスラッシュがあるため、'/foo/'へのリクエストは一致しません。

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

4

2 に答える 2

7

別の関連するケースでは、次の 3 つのパターンを一致させることができます。

/foo
/foo/
/foo/page/1

ルートの末尾のバックスラッシュを削除し、正規表現を緩和して、1 文字以上 (+) ではなく 0 文字以上 (*) に一致するようにします。

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

ただし、それは /foo/page/1/ とは一致しません

于 2012-04-17T07:28:38.090 に答える
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にアクセスし、アクセスするとpageActionにアクセスし/foo/1/ます。

編集:

誤解して申し訳ありません。私はあなたの問題を再現しようとしました。最も簡単な方法は、次のように設定で 2 つのルートを定義することです。

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: ".+"

パラメータ{page}のないルートでは、ページのデフォルトを1に設定できます。

しかし、ここのクックブックには、ルートパラメーターで「/」文字を許可する方法の章があり、ルートで/を許可して、その後に続くすべてが/foo/123/234/変数$pageにあり、関数で自分でそれらを分割できます。

于 2012-04-10T18:31:11.570 に答える