2012-06-27 3 views
3

У меня есть URL, который выглядит следующим образом:Yii рамки urlManager переписать правила

<controller>/<action>/param/value 

, и я хочу, чтобы это как-то вроде этого:

param/value 

Как это может быть достигнуто?

Я пробовал это правило, но не уверен, что это нормально (контроллер - это учетная запись, а действие - индекс).

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

'urlManager' работает наоборот, вам нужны переадресации' .htaccess'. – adamors

ответ

3

Если я uderstand ваш вопрос правильно, вы хотите обрабатывать URL, например:

mysite.domain/user/username123 

И позвони actionIndex в AccountController с PARAM пользователя, который (в данном случае) равно "username123"

В этом случае вы можете попробовать правило bel вл:

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

Но, возможно, вам нужно будет изменить объявление, если ваши действия:

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

Я бы не ставить Params в подписи действий в юй doens't идти о обработки действий с подписями [не соответствующей изящно] на самом деле ... Фактически, включение $ user in будет привязывать это действие, чтобы всегда требоваться указатель $ user, и если вы когда-либо решаете изменить свою функциональность, отслеживание того, почему ваше действие не вызывается, было бы сложнее, чем определение почему ваш $ _GET не установлен ... Я бы предложил вместо добавления пользователя $ в подпись, просто сделайте что-то в своих активах на.

//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.. 
    } 
} 

Этот подход позволяет вашему действию быть более универсальным. Правило URL должен выглядеть следующим образом:

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

Надежда, что помогает & & счастливым кодирования!

Смежные вопросы