Symfony2-Routing: Zwei optionale Parameter, - at least one erforderlich
Ich versuche, einige Routen in symfony2 für die folgenden Muster:
www.myaweseomesite.com/payment/customer/{customernumber}/{invoicenumber}
Beide Parameter sind optional - so dass die folgenden Szenarien muss:
www.myaweseomesite.com/payment/customer/{customerNumber}/{invoiceNumber}
www.myaweseomesite.com/payment/customer/{customerNumber}
www.myaweseomesite.com/payment/customer/{invoiceNumber}
Richte ich mein routing.yml nach der symfony2 doc.
payment_route:
pattern: /payment/customer/{customerNumber}/{invoiceNumber}
defaults: { _controller: PaymentBundle:Index:payment, customerNumber: null, invoiceNumber: null }
requirements:
_method: GET
Dieser funktioniert soweit Super. Das problem ist, dass, wenn die beiden Parameter fehlt oder leer ist, wird die route nicht arbeiten sollten. So
www.myaweseomesite.com/payment/customer/
nicht arbeiten sollten. Gibt es eine Möglichkeit, dies zu tun mit Symfony2?
- Wie funktioniert die params Aussehen? Haben Sie Länge Spezifität oder nur die Ziffern ? Nur Buchstaben? Buchstaben und Ziffern? Denn wenn Sie beide in beliebiger Länge mit nur zahlen ist dies unmöglich, da man nicht wissen kann, was was ist.
- customerNumber ist eine Ziffer, invoiceNumber ist ein string
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie definieren, die es in zwei Routen, um sicher zu sein, haben nur 1 slash.
Bitte beachten Sie, dass Sie möglicherweise müssen Sie ändern die regex-Definition der Parameter, abhängig von Ihrem genauen Bedarf. Sie können schauen Sie, diese. Komplexe regex zu sein, umgeben von
"
. (Beispielmyvar : "[A-Z]{2,20}"
)customerNumber: null
von der ersten route, sonst akzeptiert er die route ohne Parameter. Ich habe aktualisiert, um widerzuspiegeln, dass!)Nochmal @Hugo Antwort, unten finden Sie die Konfiguration mit Annotationen :
Als pro-Dokumentation:
http://symfony.com/doc/current/routing/optional_placeholders.html
legen Sie einen Standardwert für den optionalen Parameter, die in den Anmerkungen in der Steuerung:
Diese Weise müssen Sie nur eine route in das routing.yml