CakePHP 2.0 Router :: проблема подключения без видимого идентификатора в URL - PullRequest
0 голосов
/ 24 ноября 2011

Я хочу следующий SEO URL, как:

www.example.com/users/profile/webfacer

Я не хочу использовать уникального пользователя для извлечения из базы данных.

Я пытаюсь использовать метод Router connect в моем AppController. но я понял, что это невозможно (или не знаю сейчас, чтобы использовать его в их также используется вways.php не помогло), как это:

    //in AppController
Router::connect('/users/profile/:name', 
    array(
        'controller' => 'users',
        'action'     => 'profile'
    ) ,
    array(
        'pass' => array('id', 'name'),
        'id'   => '[0-9]+'
    )
);

Как можно воспроизвести эту ссылку (ниже примера) с помощью этого помощника по ссылке html, чтобы отправить идентификатор, но не показать его в URL:

$this->Html->link('webfacer',array(
       'controller'=>'users',
       'action'=>'profile',
       'id'=>1,
       'name'=>'webfacer'
));

Это вывело бы www.example.com/users/profile/username:webfacer, что означает, что мой маршрутизатор не отображается в моих опциях маршрута.

Кто-нибудь имел такие же проблемы и решил это?

1 Ответ

3 голосов
/ 24 ноября 2011

Поскольку вы не указали аргумент :id в строке маршрута, Cake не будет знать, что делать, когда вы передаете его в помощник, поэтому он просто добавляет его в качестве обычного параметра в URL. Невозможно передать «скрытый» идентификатор с помощью URL-адреса, лучше всего либо выставить его, либо на другом конце приложения написать что-то, что выбирает идентификатор на основе имени пользователя, которое вы передаете (убедитесь, что этот столбец индексируется и безопасен для URL).

Я бы просто упростил ваш маршрут до этого:

//in AppController
Router::connect('/users/profile/:name', 
    array(
        'controller' => 'users',
        'action'     => 'profile'
    ) ,
    array('pass' => array('name'),
    )
);

И не беспокойтесь о передаче удостоверения помощнику. В вашем профиле действия вы бы просто что-то вроде этого:

public function profile($name) {
    $user = $this->User->find('first', array('conditions' => array('name' => $name)));
}
...