2013-04-06 2 views
0

У меня проблема с маршрутами на CakePHP. Позволь мне объяснить. Я использую аутентификацию через компонент Auth. У меня есть префикс маршрутизации, который называется account. Когда я хочу, чтобы изменить пользователь, я звоню контроллер пользователей, которые дают мне URL, как:Cakephp route and prefix

/account/users/edit/5 

То, что я хочу, чтобы иметь URL вроде:

/account/edit/5 

Так меняю мой маршрутизатор так:

Router::connect('/:prefix/edit/:id', 
    array('controller' => 'users', 'action' => 'edit'), 
    array('pass' => array('id'), 'id' => '[0-9]+') 
); 

, которые работают очень хорошо, когда я пытаюсь получить доступ к /account/edit/5

Моя проблема находится в моем представлении, как я могу получить доступ к этому маршруту с помощью помощника Html link?

До сих пор, я просто делаю это так:

'/'.$this->Session->read('Auth.User.role').'/edit/'.$this->Session->read('Auth.User.id') 

Но это не совсем чистая, на мой взгляд. Я хочу, чтобы использовать вспомогательные

Спасибо большое за помощь

+0

Вы всегда хотите, чтобы URL, чтобы начать с «счетами», независимо от роли пользователей? – thaJeztah

+0

Нет, введите url с учетной записью, когда пользователь имеет тип 'account', в противном случае это будет другой префикс – lkartono

ответ

0

Использование префикса «счет» будет означать нуждаясь действие, как «account_edit» в контроллере. Это, вероятно, не то, что вы хотите. Также зачем ставить «id» в url, когда он уже присутствует в сеансе? Почему бы просто не использовать URL-адрес/учетную запись для всех пользователей и получить идентификатор (и роль, если требуется) из сеанса в действии?

Router::connect('/account', 
    array('controller' => 'users', 'action' => 'edit') 
); 

Это будет чистый способ получения требуемого URL:

$this->Html->link('Account', array(
    'controller' => 'users', 
    'action' => 'edit' 
)); 
// Will return url "/account" 

В общем всегда используйте форму массива, чтобы указать URL, чтобы извлечь выгоду из обратной маршрутизации.

+0

Привет, спасибо за хит об идентификаторе в сеансе, вы правы. О ссылке, поскольку учетная запись 'type' (prefixe) является учетной записью, url'/account' является ссылкой на пользовательскую панель мониторинга. Чтобы изменить, я хочу использовать '/ account/edit'. Для маршрутизатора я знаю, как это сделать, но это должно привести его в соответствие с html-помощником. Спасибо – lkartono

+0

Итак, используйте маршрут по мере необходимости и, чтобы получить ссылку, укажите URL-адрес, например. я дал. Предполагая, что используемый вами маршрут совпадает с тем, что вы изначально показывали, просто добавьте «префикс» => «учетная запись» в массив url в вспомогательном использовании, например. Я показал. – ADmad

+0

Нет, он все еще не работает. Он создает ссылку, например '/ account/users/edit'. Не понимаю, почему он не может отменить URL-адрес. – lkartono

0

все просто отлично, за исключением маршрутизатора. она должна быть

Router::connect('/account/*', 
    array('controller' => 'users', 'action' => 'edit') 
); 

и создание анкерной связи в различном пути с помощью помощнику вы можете CHECK HERE