I'm trying to set up some routes in symfony2 for the following pattern:
www.myaweseomesite.com/payment/customer/{customernumber}/{invoicenumber}
Both parameters are optional - so the following scenarios must work:
www.myaweseomesite.com/payment/customer/{customerNumber}/{invoiceNumber}
www.myaweseomesite.com/payment/customer/{customerNumber}
www.myaweseomesite.com/payment/customer/{invoiceNumber}
I set up my routing.yml according to the symfony2 doc.
payment_route:
pattern: /payment/customer/{customerNumber}/{invoiceNumber}
defaults: { _controller: PaymentBundle:Index:payment, customerNumber: null, invoiceNumber: null }
requirements:
_method: GET
This works great so far. The problem is, that if both parameters are missing or empty, the route should not work. So
www.myaweseomesite.com/payment/customer/
should not work. Is there any way to do this with Symfony2?
You can define it in two routes to be sure to have only 1 slash.
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
Please note that you might have to change the regex defining the parameters depending of your exact needs. You can look at this. Complex regex have to be surrounded by "
. (Example myvar : "[A-Z]{2,20}"
)
To elaborate on @Hugo answer, please find below the config with annotations :
/**
* @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 }
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With