Проблемы обратной маршрутизации CakePHP - PullRequest
1 голос
/ 09 января 2012

Я использовал маршрутизацию с "slug" в качестве именованного параметра, например:

Router::connect('/category/:slug',  array('controller'=>'categories', 'action'=>'view'), array('pass'=>array('slug'), 'slug'=>'[a-z0-9\-]+'));

Теперь я наткнулся на проблему, потому что я хочу ограничить вышеуказанный маршрут только для зарегистрированных пользователей, поэтому я поместил это в функцию beforeFilter () моего CategoriesController:

if(!$this->Auth->loggedIn()) {
    $this->Auth->deny('view');
}

Теперь, если я перейду в / category / my-category (пока выйду из системы), я буду перенаправлен на страницу входа в мое приложение, к сожалению, после того, как я войду в систему, я буду перенаправлен в / category / view / my-category / slug : моя-категория

Это связано со строкой 317 AuthComponent.php, где мы имеем:

$this->Session->write('Auth.redirect', Router::reverse($request));

Похоже, что когда я выполняю Router :: reverse ($ request) на указанном выше маршруте, он не работает должным образом (поскольку он считает, что my-category должна быть как переданным, так и именованным параметром).

Это проблема с тем, как я настроил этот маршрут, или это ошибка в CakePHP? Конечно, Router :: reverse ($ request) всегда должен возвращать URL, по которому мы сейчас находимся?

Любой совет приветствуется ...

1 Ответ

1 голос
/ 09 января 2012

Я не уверен на 100%, является ли это ошибкой или нет, но до тех пор, пока мы не выясним, что обходным путем может быть ручная установка нового loginRedirect в вашем контроллере категорий, например:

if(!$this->Auth->loggedIn()) {
    $this->Auth->deny('view');
    $this->Auth->loginRedirect = '/categories/' . $this->request->params['slug'];
}

Обратите внимание, проверьте, что $this->request->params['slug'] - это правильная переменная, а не 100% от макушки головы.

...