2016-08-04 29 views
1

Ich habe zwei Routen schreiben:Symfony-Routing: Pfad() -Methode nicht Standard-param Wert

// routing.yml 
foo_list: 
    path: /foo 
    defaults: { _controller:MyBundle:Foo:index } 

foo_view: 
    path: /foo/{id} 
    defaults: 
     _controller: AlfnooBundle:Exploitant:view 
     id : 1 
    requirements: 
     id: \d* 

Die erste für eine Seite, die die foos alle Listen, die zweite ist die Seite, die Anzeige eine detaillierte Ansicht von foo n. {Ich würde}. In meinem Zweig Ansicht, erzeuge ich den Link zu foo_view wie folgt aus:

{{path('foo_view', {'id': foo.id})}} 

Es ist in Ordnung, wenn id nicht 1 ist (der Standardwert): /foo/12345. Aber wenn id1 ist, erzeugt die path() Methode eine falsche URL, es gibt den id Parameter aus, und die generierte Route ist: /foo. Was ist nicht foo_view, aber foo_list. Wenn ich den Standardwert ändere, ist das Problem der Standardwert.

{{path('foo_view', {'id': 1})}}  => /foo  => BAD ! I want /foo/1 
{{path('foo_view', {'id': 123})}} => /foo/123 => GOOD 

So wie kann ich zwingen Zweig path() Methoden, um immer den param Wert hinzufügen, auch wenn es der Standardwert ist? Ich möchte die URLs für:

/foo   => foo_list 
/foo/   => foo_view with id=1 
/foo/12345  => foo_view with id=12345 

Vielen Dank.

+0

Warum nicht diesen Standardwert für ID entfernen? – DOZ

+0

@DOZ Weil ich Aktionen für die URL '/ foo'und die URL'/foo/'unterscheiden möchte und'/foo/'ohne gültige ID (mit 1 standardmäßig) beibehalten soll. –

+0

Lassen Sie die Anforderung, und entfernen Sie die Standard ... – Alsatian

Antwort

2

Sie können dies nicht tun, zumindest nicht auf diese Weise. Der Symfony-Router generiert keine Pfade mit nachfolgenden Schrägstrichen.

Der von path('foo_view') erzeugte Pfad immer /foo sein und wird nie /foo/ sein und da Sie einen Standard für id angegeben haben, wird der Weg nie /foo/1 entweder, wie Sie gesehen haben.

Dort is a way to coerce trailing slashes aber es ist ein aber ungeschickt, wenn Sie mich fragen.