mar*_*rty 10 php routing symfony
我正在尝试在symfony2中为以下模式设置一些路由:
www.myaweseomesite.com/payment/customer/{customernumber}/{invoicenumber}
Run Code Online (Sandbox Code Playgroud)
这两个参数都是可选的 - 因此以下方案必须有效:
www.myaweseomesite.com/payment/customer/{customerNumber}/{invoiceNumber}
www.myaweseomesite.com/payment/customer/{customerNumber}
www.myaweseomesite.com/payment/customer/{invoiceNumber}
Run Code Online (Sandbox Code Playgroud)
我根据symfony2 doc设置了routing.yml .
payment_route:
pattern: /payment/customer/{customerNumber}/{invoiceNumber}
defaults: { _controller: PaymentBundle:Index:payment, customerNumber: null, invoiceNumber: null }
requirements:
_method: GET
Run Code Online (Sandbox Code Playgroud)
到目前为止,这很有用.问题是,如果两个参数都缺失或为空,则路由不起作用.所以
www.myaweseomesite.com/payment/customer/
Run Code Online (Sandbox Code Playgroud)
不应该工作.有没有办法用Symfony2做到这一点?
Hug*_*ois 16
您可以在两个路径中定义它,以确保只有一个斜杠.
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
Run Code Online (Sandbox Code Playgroud)
请注意,您可能需要根据具体需要更改定义参数的正则表达式.你可以看看这个.复杂的正则表达式必须被包围".(例子myvar : "[A-Z]{2,20}")