CakePHP 3: Ошибка отсутствия маршрута для несуществующей функции

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

Внутри контроллера Reservations у меня есть функция add с одним аргументом:

public function add($carid = null)
{
... 
}

Соответствующий маршрут:

Router::scope('/', function ($routes) {
Router::connect('/rentcar/:id', ['controller' => 'Reservations', 'action' => 'add'],['pass' => ['id'], 'id' => '[0-9]+']);
// rest of the routes not important 
...
});
Plugin::routes();

Когда я захожу на любую страницу, я вижу следующую ошибку:

http://i.stack.imgur.com/ESX5I.jpg

В сообщении об ошибке говорится:

Ошибка: маршрут, соответствующий «массиву ( 'controller' => 'Reservations', 'action' => 'add', 'plugin' => NULL, '_ext' => NULL, )», не найден.

...что странно, потому что у меня нет функции add() без аргументов, вместо этого у меня есть функция add($carid) с одним аргументом.

Но когда я добавляю этот маршрут, все работает нормально:

Router::connect('/rentcar2', ['controller' => 'Reservations', 'action' => 'add']);

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


person Br.sasa    schedule 10.02.2016    source источник
comment
При получении ошибок всегда публикуйте точное и полное сообщение об ошибке, включая соответствующую трассировку стека! Также проверьте stackoverflow.com/questions/29782797/, вероятно, это почти та же проблема, вы где-то пытаетесь создать URL-адрес для действия резервирования/добавления без передачи идентификатора.   -  person ndm    schedule 10.02.2016
comment
@ndm На изображении выше показано точное и полное сообщение об ошибке, которое я получаю. и что касается этого вопроса, это не то же самое, и что касается того, что вы сказали об URL-адресе для резервирования/добавления, вот мой код: <?= $this->Html->link(__('Reservation'), ['controller' => 'Reservations','action' => 'add', $car->id]) ?>   -  person Br.sasa    schedule 10.02.2016
comment
Он показывает сообщение, но ему не хватает трассировки стека. Без последнего невозможно сказать, где на самом деле можно найти проблемный вызов.   -  person ndm    schedule 10.02.2016
comment
@ndm Требуемое действие reservations/add($carid) вызывается НЕ с текущего контроллера reservations, а с контроллера cars, поэтому я указываю полный URL-адрес для функции add($carid): <?= $this->Html->link(__('Reservation'), ['controller' => 'Reservations','action' => 'add', $car->id]) ?, но cakePHP не распознает переданный параметр $car -›id, чтобы он соответствовал маршруту Router::connect('/rentcar/:id', ['controller' => 'Reservations', 'action' => 'add'],['pass' => ['id'], 'id' => '[0-9]+']);   -  person Br.sasa    schedule 10.02.2016
comment
Массив URL-адресов, который вы показываете здесь, будет соответствовать показанному маршруту (даже если он определен неправильно - вызовы Router::connect() не должны быть вложенными), поэтому проблема, вероятно, где-то еще, вероятно, такая же, как в связанном вопросе, но я Не буду дальше стрелять в темноте, так что еще раз, пожалуйста, покажите stacktrace!   -  person ndm    schedule 10.02.2016
comment
@ndm Я просто указываю на проблему, чтобы было ясно, да, URL-адрес должен соответствовать маршруту, но это не так, что вы хотите, чтобы я точно показал? даже я уверен, что в коде нет ошибки.   -  person Br.sasa    schedule 11.02.2016
comment
@ndm Внутри моего route.php есть только Router::connect() для каждого действия контроллера. Итак, что именно вы хотите, чтобы я показал?   -  person Br.sasa    schedule 11.02.2016
comment
Трассировка стека, связанная с полученной ошибкой. Он показан слева, и его можно найти в более удобном для копирования и вставки формате в файлах журнала.   -  person ndm    schedule 11.02.2016
comment
@ndm Вы правы, я нашел ошибку, именно в этой строке кода она закомментирована <!-- .... <li role="presentation"><?= $this->Html->link(__('New Reservation'), ['controller' => 'Reservations', 'action' => 'add']) ?></li> --> большое спасибо, чувак.   -  person Br.sasa    schedule 11.02.2016
comment
@ndm Даже я прокомментировал этот код, но он вызывает проблему. Спасибо.   -  person Br.sasa    schedule 11.02.2016
comment
Это потому, что это комментарий HTML, а не комментарий PHP.   -  person ndm    schedule 11.02.2016


Ответы (1)


Проблема заключалась в закомментированном HTML-коде, который содержит PHP-код внутри, такой код:

<!-- <li role="presentation"><?= $this->Html->link(__('New Reservation'), ['controller' => 'Reservations', 'action' => 'add']) ?></li> -->

Который содержит мою старую функцию без аргументов add контроллера Reservations. Я удалил любой подобный код, и все заработало нормально.

person Br.sasa    schedule 10.02.2016