Wie man zur Laufzeit den Namen der route ein in Symfony2 bei der Verwendung des yaml-Routen-Beschreibung?
Hier finden Sie meine n-te Frage auf Symfony2.
Arbeite ich mit einem Paginierung bundle verwendet den Namen der route ein in die routing.yml
- Datei.
Aus meiner Sicht ist dieser Ansatz nicht flexibel und führen zu einer schmutzig-code, denn wenn ich den Namen der route, dann muss ich mal schauen alle die Twig-templates oder PHP-Dateien zu aktualisieren, den Namen der route ein. Das ist ok für kleine Web-Anwendungen, sondern wird ein solcher Fehler auch für größere Anwendungen und müssen auch eine hohe Belastung für die Entwickler.
So, ich Frage mich, übergeben Sie einen string-variable x der Pager
- Objekt enthalten, das durch das oben erwähnte bundle. Der string x sollte initialisiert werden, die innerhalb der controller und hat das gewünschte route angegebenen Namen in der routing.yml
Datei.
Lassen Sie mich ein Beispiel geben. Die routing-Datei ist die folgende:
//routing.yml
AcmeTestBundle_listall:
pattern: /test/page/{page}
defaults: { _controller: AcmeTestBundle:List:listall, page: 1 }
requirements:
page: \d+
Dann wird der dazugehörige controller ist:
//use something....
class ListController extends Controller
{
public function exampleAction($page)
{
$array = range(1, 100);
$adapter = new ArrayAdapter($array);
$pager = new Pager($adapter, array('page' => $page, 'limit' => 25));
return array('pager' => $pager);
}
}
Dann, in der twig template, die $pager
erhält den Namen der route ein, die sich auf das oben genannte Paket
{% if pager.isPaginable %}
{{ paginate(pager, 'AcmeTestBundle_listall') }}
{% endif %}
{% for item in pager.getResults %}
<p>{{ item }}</p>
{% endfor %}
Irgendeine Idee, wie man die 'AcmeTestBundle_listall' string-Wert zur Laufzeit nur im controller?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie die
app
Globale variable, die in Zweig, um die aktuelle route von der Anfrage.Mehr über
app
hier und hier.app.request.attributes.get('_route')
. Vermeiden Sie die Verwendung derRequest::get()
Methode, denn es wird zunächst versucht, abrufen der parameter aus dem query-parameter-Tasche - die Attribute, die Tasche ist nur als fallback verwendet. Das heißt, mitRequest::get()
ist, kann ein Benutzer überschreiben_route
durch Anhängen?_route=my_tainted_param
auf die URL.