Nach Login Routing in Unterverzeichnis

Hallo,

ich würde meine Applikation gerne so aufbauen, dass nach dem Login eines Users an die Domain immer das Verzeichnis "/intern" angehängt wird. Dadurch möchte ich eine Trennung zwischen internem und externem Bereich kenntlich machen.

Also alle nicht eingeloggten Pfade wären dann z.B.:


www.xyz.de/info

www.xyz.de/contact

www.xyz.de/contact/send

Wenn jemand eingeloggt ist, dann sollte die URL so aussegen:


www.xyz.de/intern/

www.xyz.de/intern/change

www.xyz.de/intern/show

u.s.w.

Jetzt könnte ich ja einfach einen Controller "InternController" anlegen und hätte das damit gelöst. Ich möchte aber auch, dass bei anderen Controllern nach dem Login "/intern" stehen bleibt. Ich möchte ja nicht alle Actions für jegliche Aktionen in den Controller "InternController" packen. Wenn ich also einen Controller "SearchController" habe, soll die URL auch so lauten:


www.xyz.de/intern/search/

www.xyz.de/intern/search/user

www.xyz.de/intern/search/page

u.s.w.

Wie schaffe ich es also mit dem URL-Management der Applikation zu sagen: "wenn User eingeloggt, stelle immer "/intern" hinter die Domain"?

Danke!

Gruß

Oneside

Willkommen im Forum.

Seit Version 1.1.8 kann man eigene UrlRule Klassen verwenden. Siehe dazu im Guide: http://www.yiiframework.com/doc/guide/1.1/de/topics.url#eigene-url-rule-klassen

Die createUrl Methode dürfte recht einfach zu überschreiben sein:


public function createUrl($manager, $route, $params, $ampersand)

{

   $url = parent::createUrl($manager, $route, $params, $ampersand);

   if ($url !== false && !Yii::app()->user->isGuest)

      $url = '/intern' . $url;

   return $url;

}

In der parseUrl Methode muss man dann halt "intern" aus der uri entfernen und mit parent::parseUrl() arbeiten.

In der config kann man dann die default Klasse festlegen:


'components' => array(


   'urlManager' => array(

      'urlRuleClass' => 'MyUrlRule',

   ),


),

Hilft dir das weiter?