CakePHP 3: Отсутствует ошибка маршрута для маршрута, который существует

CakePHP 3.0

Я получаю ошибку «Пропущенный маршрут» для маршрута, который существует.

Вот мои маршруты:

#my admin routes... Router::prefix('admin', function($routes) { $routes->connect('/', ['controller'=>'Screens', 'action'=>'index']); $routes->connect('/screens', ['controller'=>'Screens', 'action'=>'index']); $routes->connect('/screens/index', ['controller'=>'Screens', 'action'=>'index']); //$routes->fallbacks('InflectedRoute'); }); Router::scope('/', function ($routes) { $routes->connect('/login', ['controller' => 'Pages', 'action' => 'display', 'login']); $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']); $routes->fallbacks('InflectedRoute'); }); Plugin::routes(); 

В основном я просто добавил верхний раздел (для маршрутизации администратора) к маршрутам по умолчанию, которые выходят из коробки.

Когда я посещаю /admin/screens/index я вижу следующую ошибку:

введите описание изображения здесь

Обратите внимание на сообщение об ошибке:

Ошибка: сопоставление маршрутов «array» («action» => «add», «prefix» => «admin», «plugin» => NULL, «controller» => «Screens», «_ext» => NULL,) " невозможно найти.

… что странно, потому что я не пытаюсь получить доступ к действию add . Параметры, напечатанные ниже, выглядят правильно.

Что происходит?

Присмотритесь к stacktrace, ошибка dosn't occour в процессе диспетчеризации, которую вы, кажется, думаете, она запускается в вашем шаблоне просмотра, где вы, вероятно, пытаетесь создать ссылку на действие add , и обратное -routing не может найти соответствующий маршрут, следовательно, ошибка.

Решение должно быть очевидным, соединить необходимые маршруты, будучи явными, такими как

 $routes->connect('/screens/add', ['controller' => 'Screens', 'action' => 'add']); 

уловки

 $routes->connect('/screens/:action', ['controller' => 'Screens']); 

или просто резервные, которые ловят все

 $routes->fallbacks('InflectedRoute'); 

Эта работа для меня в случае использования префикса admin: –

 Router::prefix('admin', function ($routes) { // Because you are in the admin scope, // you do not need to include the /admin prefix // or the admin route element. $routes->connect('/', ['controller' => 'Users', 'action' => 'index']); $routes->extensions(['json', 'xml']); // All routes here will be prefixed with `/admin` $routes->connect('/admin', ['controller' => 'Order', 'action' => 'index']); // And have the prefix => admin route element added. $routes->fallbacks(DashedRoute::class); });