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); });