Seit nun ein paar Wochen ist jetzt Yii2 schon auf dem Markt. So wird es Zeit dass ich euch von Yii2 meine Erfahrungen zeige. Da ich mir erst einmal einige Gedanken machen musste bis ich die erste Url in Yii2 aufgebaut hatte möchte ich euch hier einige Möglichkeiten aufzeigen.
Wenn eine Funktion eine Url erwartet kann man diese einfach in der short Array Syntax angeben. So erstellt man einen Link auf die Action „Login“ des „Site“-Controllers wie folgt:
1 | Html::a('Login', ['login']) |
Dabei kommt ein Link „index.php?r=site/login“. Möchte man nun auf einen anderen Controller verweisen so gibt man die Url mit einem führenden Slash an. Dies ist gleich geblieben zu Yii 1, jedoch wird in Yii2 dies via short Array Syntax notiert. Wenn wir nun auf den Controller „User“ verweisen möchten, müssen wir dies wie folgt tun:
1 | Html::a('Login', ['/user/login']) |
Hier erhalten wir einen Link der sich ähnlich wie folgender aufbauen wird „index.php?r=user/login“. Wir möchten jedoch noch einen Schritt weiter gehen und einen Parameter „frontend“ mit dem Wert 1 übergeben. Dies erledigen wir in dem wir ein weiteres Element in das Array einfügen.
1 | Html::a('Login', ['/user/login', 'frontend'=>1]) |
So können wir beliebige Parameter mit der Url weitergeben. Dies war jetzt alles sehr ähnlich wie in Yii1. Wenn wir jedoch nun eine einfache URL generieren möchten ohne weiteres Markup herum so machen wir dies mit der URL-Klasse von Yii. Weitere Informationen zu dieser Klasse können unter folgendem Link aufgerufen werden.
1 2 | use yii\helpers\Url; Url::to(['/user/login']); |
So erhalten wir ebenfalls einen verweis zu „index.php?r=user/login“. Jedoch erhalten wir dieses mal nicht ein komplettes Html-Tag mit Label etc. sondern lediglich die reine Url. Diese können wir selbst weiterverwenden. Beispielsweise wenn wir über normales HTML einen Link erstellen. Dabei verhält sich der erste Parameter von Url::to() gleich zu dem zweiten Parameter von HTML::a().
Wenn wir nun noch folgenden Code in unserer Yii2 Konfiguration unter „Components“ mit einbinden:
1 2 3 4 | 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, ], |
Dann erhalten wir eine Url die ähnlich folgender aussehen wird „http://domain.tld/user/login“