Home > Yii > Smart URLs mit Yii

Smart URLs mit Yii

Die URLs in Yii haben normalerweise den folgenden Aufbau:

  • index.php?r=site/contact
  • index.php?r=site/contact&p=1

Hier werden jeweils die contactAction des siteControllers ausgeführt. Im unteren Beispiel wird noch ein Parameter p mitgegeben, der per

$p = Yii::app()->request->getParam("p");

abgefragt werden kann

Dieser Aufruf kann auch mit default-Werten arbeiten.

$p = intval(Yii::app()->request->getParam("p", 0));

Wird der Parameter p weggelassen, ist er eben 0.

Nun gibts auch noch die UrlManager-Komponente, die sich folgendermaßen in der config festlegen läßt.

'urlManager' => array(
    'urlFormat' => 'path'
),

somit sehen dann die URLs von oben folgendermaßen aus:

  • index.php/site/contact
  • index.php/site/contact/p/1

das index.php bekommt man mit zwei Schritten weg.

1. .htaccess

Options +FollowSymLinks
IndexIgnore */*
RewriteEngine on
 
# if a directory or a file exists, use it directly
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
 
# otherwise forward it to index.php
RewriteRule . index.php

2. config/main.php:

'urlManager'=>array(
    'urlFormat' => 'path',
    'showScriptName' => false
),

jetzt haben wir nur noch

  • /site/contact
  • /site/contact/p/1

Zum Schluss wollen wir noch ein paar “rules” definieren.
ich will ein Benutzerprofil anzeigen, würde normalerweise so aussehen:

  • /user/show/id/589

Hier wird das Profil des Benutzers mit der id = 589 angezeigt, indem die ShowAction des UserControllers ausgeführt wird.
wir möchten allerdings folgende Urls

  • /profile/mbischof
  • /profile/mbischof/guestbook
  • /profile/mbischof/galery

Dafür konfigurieren wir den UrlManager wie folgt:

'urlManager' => array(
    'urlFormat' => 'path',
    'showScriptName' => false,
    'rules' => array(
        'profile/<username>' => 'user/show'
        'profile/<username>/guestbook' => 'guestbook/list'
        'profile/<username>/galery' => 'image/list'
    )
),

vorrausgesetzt, wir haben einen GuestbookController bzw ImageController mit den entsprechenden Actions. Das Prinzip sollte klar sein.
In der ShowAction des UserControllers erhalten wir den Bentuzername so:

$username = Yii::app()->request->getParam("username", "");

Verwandte Artikel:

  1. Yii Message Translation
  2. Einfache Seiten
  3. Yiiframework Events
  4. Models aus Modulen verwenden
  5. Ein Modul als Admin Backend
  6. yiic shell
  7. Mit Yii eine Datei hochladen
  8. Widgets
  9. Gegen DB authentifizieren
  10. Ajax Updates
  11. Yii Module
  12. Erste Schritte mit Yii
  13. Parameterized Named Scopes
  14. Webservice mit Yii
  15. Erste Schritte mit Yii Teil 2
Author: Categories: Yii Tags:
  1. Bisher keine Kommentare
  1. Bisher keine Trackbacks