10

次のパターンでsymfony2にいくつかのルートを設定しようとしています:

www.myaweseomesite.com/payment/customer/{customernumber}/{invoicenumber}

どちらのパラメーターもオプションです。したがって、次のシナリオが機能する必要があります。

www.myaweseomesite.com/payment/customer/{customerNumber}/{invoiceNumber}
www.myaweseomesite.com/payment/customer/{customerNumber}
www.myaweseomesite.com/payment/customer/{invoiceNumber}

symfony2 docに従って、routing.yml をセットアップしました。

payment_route:
pattern:  /payment/customer/{customerNumber}/{invoiceNumber}
defaults: { _controller: PaymentBundle:Index:payment, customerNumber: null,  invoiceNumber: null }
requirements:
    _method:  GET

これはこれまでのところうまくいきます。問題は、両方のパラメーターが欠落しているか空の場合、ルートが機能しないことです。そう

www.myaweseomesite.com/payment/customer/

動作しないはずです。Symfony2 でこれを行う方法はありますか?

4

3 に答える 3

16

スラッシュが 1 つだけになるように、2 つのルートで定義できます。

payment_route_1:
    pattern:  /payment/customer/{customerNumber}/{invoiceNumber}
    defaults: { _controller: PaymentBundle:Index:payment, invoiceNumber: null }
    requirements:
        customerNumber: \d+
        invoiceNumber: \w+
        _method:  GET

payment_route_2:
    pattern:  /payment/customer/{invoiceNumber}
    defaults: { _controller: PaymentBundle:Index:payment, customerNumber: null }
    requirements:
        invoiceNumber: \w+
        _method:  GET

正確なニーズに応じて、パラメーターを定義する正規表現を変更する必要がある場合があることに注意してください。これを見ることができます。複雑な正規表現は で囲む必要があります"。(例myvar : "[A-Z]{2,20}")

于 2013-03-08T20:07:26.153 に答える
4

@Hugoの回答を詳しく説明するには、注釈付きの設定の下を見つけてください:

/**
 * @Route("/public/edit_post/{post_slug}", name="edit_post")
 * @Route("/public/create_post/{root_category_slug}", name="create_post", requirements={"root_category_slug" = "feedback|forum|blog|"})
 * @ParamConverter("rootCategory", class="AppBundle:Social\PostCategory", options={"mapping" : {"root_category_slug" = "slug"}})
 * @ParamConverter("post", class="AppBundle:Social\Post", options={"mapping" : {"post_slug" = "slug"}})
 * @Method({"PUT", "GET"})
 * @param Request $request
 * @param PostCategory $rootCategory
 * @param Post $post
 * @return array|\Symfony\Component\HttpFoundation\RedirectResponse
 */
public function editPostAction(Request $request, PostCategory $rootCategory = null, Post $post = null)
{ Your Stuff }
于 2015-02-20T11:51:02.273 に答える