CakePHP маршрутизация помощь / вопрос - PullRequest
0 голосов
/ 09 мая 2011

У меня есть простая пользовательская система, использующая CakePHP, и вы просматриваете профили, например, /users/view/11, где 11 будет идентификатором. Что я хочу сделать, так это изменить его, чтобы вместо него использовалось имя пользователя, чтобы вы получили URL-адрес типа /users/view/cameron.

Я знаю, что я мог бы изменить это в контроллере, а также в представлении ссылок действий, НО мне было интересно, можно ли изменить это в маршрутизации, чтобы это изменило все автоматически, или мне все еще нужно изменить методы в контроллере и т.д?

Примеры были бы великолепны. Спасибо

КОД НА ОСНОВЕ НИЖЕ ОТВЕТА:

function view ( $username = null )
{
    $this->layout = 'page';

    $this->set('users', $this->User->findByUsername($username));

    $this->set('title_for_layout', $this->User->field('firstname') . ' ' . $this->User->field('lastname'));
}

но заголовок не работает?

Ответы [ 2 ]

2 голосов
/ 09 мая 2011

К сожалению, вы не можете создать правило маршрутизации, которое будет делать это автоматически. Вам следует изменить функцию view (), чтобы она принимала имя пользователя в качестве параметра, а затем выполнить поиск по имени пользователя. то есть:

function view($username = null) {
    $this->set('user', $this->User->findByUsername($username));
}
0 голосов
/ 09 мая 2011

Маршрутизация не работает таким образом, поэтому вы должны вручную редактировать ссылки в каждом представлении. Или вы можете просто использовать переданный идентификатор для поиска записи пользователя.

Функция $ this-> User-> field работает без параметров, если установлено значение $ this-> User-> id. Возможно, вы захотите сделать что-то вроде этого:

function view ( $username = null )
{
    $this->layout = 'page';
    $users = $this->User->findByUsername($username);
    if(sizeof($users))
    {
        $this->set('users', $users);
        $this->set('title_for_layout', $users[0]['User']['firstname'] . ' ' . $users[0]['User']['lastname']);
    }
    else
    {
        $this->Session->setFlash('Invalid username');
    }
}

Надеюсь, это поможет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...