2015-04-21 3 views
9

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

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

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

#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 я вижу следующее сообщение об ошибке:

enter image description here

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

Error: A route matching "array ('action' => 'add', 'prefix' => 'admin', 'plugin' => NULL, 'controller' => 'Screens', '_ext' => NULL, )" could not be found.

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

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

+0

Urgh Cake. Используя 2.0, у меня были проблемы с кэшированными моделями. Я нашел, что отладка до 2 будет сортировать. Я предполагаю, что вы очистили кеш и т. Д. –

+0

Конфигурации отладки, похоже, немного изменились. Теперь это логическое значение, которое я установил в TRUE. Чтобы быть в безопасности, я также удалил все файлы кэша в tmp /, и он все еще делает это. – emersonthis

+0

Это исчерпало бы мой ход. Похоже, ndm имеет более полезную информацию –

ответ

11

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

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

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

уловов всех тех

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

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

$routes->fallbacks('InflectedRoute'); 
+1

Вы снова прибили ее! – emersonthis

0

Эта работа для меня в случае использования префикса 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); 
}); 
Смежные вопросы