2012-06-27 3 views
3

J'ai une URL qui ressemble à ceci:cadre Yii urlManager réécrire les règles

<controller>/<action>/param/value 

et je veux aimer quelque chose comme ceci:

param/value 

Comment peut-il être atteint?

J'ai essayé cette règle mais je ne sais pas si c'est OK (le contrôleur est le compte et l'action est l'index).

'user/<user:.*>' => 'account/index/user/test' 
+0

'urlManager' fonctionne dans le sens inverse, ce dont vous avez besoin, ce sont les redirections' .htaccess'. – adamors

Répondre

3

Si j'uderstand votre question, vous voulez gérer les URL comme ceci:

mysite.domain/user/username123 

Et appelez actionIndex dans AccountController avec le paramètre utilisateur, qui (dans ce cas) est égal à "nom d'utilisateur123"

Dans ce cas, vous pouvez essayer la règle bel OW:

'user/<user:.*>' => 'account/index/<user>' 

Mais peut-être vous devrez changer la déclaration si votre action:

function actionIndex($user){ 
    // code 
} 
1

j'éviter de mettre params dans les signatures d'action comme yu doens't aller sur les actions de traitement avec des signatures désadaptation [ gracieusement] du tout ... En plaçant $ user in, vous lierez cette action à toujours besoin d'un $ utilisateur spécifié et si vous décidez de changer de fonctionnalité, il sera plus difficile de déterminer pourquoi votre action n'est pas appelée. pourquoi votre $ _GET n'est pas défini ... Je suggère au lieu d'ajouter l'utilisateur $ dans la signature, faites juste quelque chose comme suit dans votre acti sur.

//will always run on /user/<USER:.*> 
function actionIndex(){ 
    $user = isset($_GET['user'])?$_GET['user']:NULL; 
    if(!is_null($user)){ 
     //your user specific account action.. 
    }else{ 
     //handle your error gracefully.. 
    } 
} 

Cette approche permet à votre action d'être plus polyvalente. La règle d'URL doit être comme suit:

'user/<user:.*>' => 'account/index/user/<user>' //user is defined as a get... 

Espoir qui aide & & heureux de codage!