Как правильно использовать метод Router Connect в CakePHP 2 и 3?

У меня есть контроллер MyUsersController с действием входа в систему. Я сопоставил это с:

$routes->connect('/member/login', [ 'controller' => 'MyUsers', 'action' => 'login', 'plugin'=>false, 'prefix'=>FALSE]);

Теперь я могу получить доступ к этому действию "логин", используя эти два URL, что не очень хорошо для SEO.

http://localhost/cakephpapp/member/login

http://localhost/cakephpapp/my-users/login

Итак, как я могу отключить второй URL?

Я пробовал этот код, который работает нормально, но я не знаю, является ли это правильный метод или нет.

$routes->redirect('/my-users/login', '/member/login');

1 ответ

Решение

В файле маршрутов по умолчанию есть строка, которая предоставляет запасные варианты, чтобы вы могли получить доступ к страницам, используя controller/action, Это действительно поможет вам быстро создать приложение. В CakePHP 3 это:

$routes->fallbacks('InflectedRoute');

Как отмечено в файле, вы можете / должны удалить эту строку после того, как вы настроили маршруты для своего приложения. Если вы удалите это, это также предотвратит заполнение ваших журналов ошибок ошибками типа "Отсутствует контроллер", которые могут быть проблемой на рабочем сайте, особенно если он заменяет существующий.

В CakePHP 2 эквивалентная строка выглядит так:

require CAKE . 'Config' . DS . 'routes.php';

Удаление этих строк означает, что вам придется определить все маршруты для вашего приложения, но это, вероятно, более эффективная практика, чем полагаться на автоматические маршруты Cake (или любой инфраструктуры). Есть хорошая статья об этом Фила Стерджена: Остерегайтесь Пути к Злу.

Другие вопросы по тегам