Wie erstelle ich eine benutzerfreundliche URL in Symfony PHP?
Frage
Ich neige immer dazu, diese eingebauten Dinge zu vergessen Symfony Funktionen zum Herstellen von Links.
Lösung
Wenn Ihr Ziel darin besteht, in Ihrer gesamten Anwendung benutzerfreundliche URLs zu verwenden, verwenden Sie den folgenden Ansatz:
1) Erstellen Sie eine Routing-Regel für Ihr Modul/Ihre Aktion in der Datei „routing.yml“ der Anwendung.Das folgende Beispiel ist eine Routing-Regel für eine Aktion, die die neuesten Fragen in einer Anwendung anzeigt, standardmäßig auf Seite 1 (unter Verwendung eines Pagers):
recent_questions:
url: questions/recent/:page
param: { module: questions, action: recent, page: 1 }
2) Sobald die Routing-Regel festgelegt ist, verwenden Sie die url_for()
Helfer in Ihrer Vorlage zum Formatieren ausgehender URLs.
<a href="<?php echo url_for('questions/recent?page=1') ?>">Recent Questions</a>
In diesem Beispiel wird die folgende URL erstellt: http://myapp/questions/recent/1.html
.
3) Eingehende URLs (Anfragen) werden vom Routing-System analysiert und wenn in der Routing-Regelkonfiguration eine Musterübereinstimmung gefunden wird, werden die benannten Platzhalter (d. h.Die :/page
Teil der URL) werden zu Anforderungsparametern.
Sie können auch die verwenden link_to()
Helfer zur Ausgabe einer URL ohne Verwendung des HTML <a>
Etikett.
Andere Tipps
Dieser Rat gilt für Symfony 1.0.Es wird wahrscheinlich für spätere Versionen funktionieren.
Innerhalb Ihrer sfAction-Klasse:
string genUrl($parameters = array(), $absolute = false)
z.B.$this->getController()->genUrl('yourmodule/youraction?key=value&key2=value', true);
In einer Vorlage:
Dadurch wird ein normaler Link generiert.
string link_to($name, $internal_uri, $options = array());
z.B.link_to('Mein Linkname', 'yourmodule/youraction?key=value&key2=value');
Wenn Sie tatsächlich eine Abfragezeichenfolge mit dieser URL möchten, verwenden Sie außerdem Folgendes:
link_to('My link name', 'yourmodule/youraction?key=value&key2=value',array('query_string'=>'page=2'));
Andernfalls wird versucht, es als Teil der URL weiterzuleiten und Ihre Aktion wahrscheinlich zu unterbrechen.
Sie können eine URL direkt generieren, ohne zuerst die Regel zu definieren.
Wenn Sie in den Aktionen eine URL generieren möchten, können Sie diese verwenden generierenUrl() Helfer:
$this->generateUrl('default', array('module'=>'[ModuleName]','action'=>'[ActionName]'))
Wenn Sie in den Vorlagen eine URL generieren möchten, können Sie diese verwenden url_for() Helfer:
url_for('[ModuleName]/[ActionName]', $absolute)
Setzen Sie $absolute auf wahr/falsch. Vergessen Sie nicht, echo zu verwenden, wenn Sie es anzeigen möchten.
Aber wenn Sie eine machen wollen Verknüpfung (etwas wie <a href=""></a>
), Link zu() Helfer reicht aus.