Cakephp 4 Url-> build с массивом выдает ошибку route not found, но не со строкой
Я пытаюсь настроить cakephp 4 с префиксной маршрутизацией. В моем home.php у меня настроен следующий код (с акцентом на тег html и href в разделе "Служебные"):
<?php if ($prefix == 'serving' || $prefix == 'admin') {?>
<div class="row">
<div class="column">
<h4>Serving Ones</h4>
<ul>
<li class="bullet success">
<a href=<?php echo $this->Url->build(['prefix' => 'serving', 'controller' => 'TrainingsUsers', 'action' => 'add']); ?>>Process Registrations</a>
<?php /**<a href=<?php echo $this->Url->build('/serving/TrainingsUsers/process'); ?>>Process Registrations</a>**/?>
</li>
</ul>
</div>
<div class="column">
<h4>Administration</h4>
<ul>
<li class="bullet success">
Add/Edit Current Training
</li>
</ul>
</div>
</div>
<hr>
<?php } ?>
Мой routes.php, нижняя часть, после всего остального, автоматически сгенерированный cakephp.
$routes->prefix('admin' , function (RouteBuilder $admin_routes) {
//$admin_routes->connect('/',['controller' => 'Pages', 'action' => 'display', 'home']);
//$admin_routes->connect('/users/:action',['controller' => 'Users', 'action' => 'index']);
//$admin_routes->connect('/TrainingsUsers/add',['controller' => 'TrainingsUsers', 'action' => 'add']);
//$admin_routes->fallbacks(DashedRoute::class);
$admin_routes->fallbacks(InflectedRoute::class);
});
$routes->prefix('serving' , function (RouteBuilder $serving_routes) {
//$serving_routes->connect(':controller/:action');
$serving_routes->connect('/TrainingsUsers/add',['controller' => 'TrainingsUsers', 'action' => 'add']);
$serving_routes->fallbacks(DashedRoute::class);
//$serving_routes->fallbacks(InflectedRoute::class);
});
Я добавил этот маршрут под префиксом "обслуживающий", в котором конкретно упоминаются контроллер и действие.
В любом случае, когда я запускаю код, я сразу получаю ошибку route not found:
Сопоставление маршрута "array ( 'prefix' => 'serv', 'controller' => 'TrainingsUsers', 'action' => 'add', 'plugin' => NULL, '_ext' => NULL,)" может не найти.
Я огляделся и попытался просмотреть документацию (я все еще не знаком с cakephp), но не мог понять, почему это происходит. Я понимаю, что резервный маршрут по умолчанию должен улавливать эту комбинацию контроллер / действие, но это не так. Даже когда я настраиваю добавление маршрута (при условии, что я сделал это правильно), он все равно говорит, что не найден.
Странно то, что когда я перехожу из массива в Url::build:
<a href=<?php echo $this->Url->build(['prefix' => 'serving', 'controller' => 'TrainingsUsers', 'action' => 'add']); ?>>Process Registrations</a>
использовать строку в аргументах:
<a href=<?php echo $this->Url->build('/serving/TrainingsUsers/add'); ?>>Process Registrations</a>
оно работает. на странице ошибки в разделе "Подключенные маршруты"
Я что-то упустил?
Я только что вспомнил. Я на Cakephp 4.0.1
Думаю, это актуальная информация из моего журнала ошибок. В моем журнале debug.log ничего не отображается.
2020-01-07 12:58:55 Error: [Cake\Routing\Exception\MissingRouteException] A route matching "array (
'prefix' => 'serving',
'controller' => 'TrainingsUsers',
'action' => 'add',
'plugin' => NULL,
'_ext' => NULL,
)" could not be found. in C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Routing\RouteCollection.php on line 341
Exception Attributes: array (
'url' => 'array (
\'prefix\' => \'serving\',
\'controller\' => \'TrainingsUsers\',
\'action\' => \'add\',
\'plugin\' => NULL,
\'_ext\' => NULL,
)',
'context' =>
array (
'_scheme' => 'http',
'_host' => 'localhost',
'_port' => NULL,
'_base' => '/cake4/psrp',
'params' =>
array (
'pass' =>
array (
0 => 'home',
),
'controller' => 'Pages',
'action' => 'display',
'plugin' => NULL,
'_matchedRoute' => '/',
'_ext' => NULL,
),
),
)
Stack Trace:
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Routing\Router.php:494
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\View\Helper\UrlHelper.php:51
- C:\xampp\htdocs\cake4\psrp\templates\Pages\home.php:75
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\View\View.php:1164
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\View\View.php:1125
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\View\View.php:750
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Controller\Controller.php:691
- C:\xampp\htdocs\cake4\psrp\src\Controller\PagesController.php:97
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Controller\Controller.php:524
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Controller\ControllerFactory.php:79
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\BaseApplication.php:229
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Runner.php:77
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\authentication\src\Middleware\AuthenticationMiddleware.php:122
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Runner.php:73
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Runner.php:77
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Middleware\CsrfProtectionMiddleware.php:132
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Runner.php:73
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Runner.php:58
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Routing\Middleware\RoutingMiddleware.php:162
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Runner.php:73
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Routing\Middleware\AssetMiddleware.php:68
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Runner.php:73
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Error\Middleware\ErrorHandlerMiddleware.php:118
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Runner.php:73
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\debug_kit\src\Middleware\DebugKitMiddleware.php:60
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Runner.php:73
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Runner.php:58
- C:\xampp\htdocs\cake4\psrp\vendor\cakephp\cakephp\src\Http\Server.php:90
- C:\xampp\htdocs\cake4\psrp\webroot\index.php:40
Request URL: /
Referer URL: http://localhost/cake4/psrp/login?redirect=%2Fcake4%2Fpsrp%2F
заранее спасибо
РЕДАКТИРОВАТЬ: маршруты bin/cake генерируются (только левый столбец):
+-------------------------------------+-------------------------------------------+----------------------------------------------------------------------------------+
| Route name | URI template | Defaults |
+-------------------------------------+-------------------------------------------+----------------------------------------------------------------------------------+
| pages:display | / | {"0":"home","action":"display","controller":"Pages","plugin":null} |
| pages:display | /pages/* | {"action":"display","controller":"Pages","plugin":null} |
| login | /login | {"action":"login","controller":"Users","plugin":null} |
| logout | /logout | {"action":"logout","controller":"Users","plugin":null} |
| _controller:index | /{controller} | {"action":"index","plugin":null} |
| _controller:_action | /{controller}/{action}/* | {"action":"index","plugin":null} |
| admin:_controller:index | /admin/{controller} | {"action":"index","plugin":null,"prefix":"Admin"} |
| admin:_controller:_action | /admin/{controller}/{action}/* | {"action":"index","plugin":null,"prefix":"Admin"} |
| serving:trainingsusers:_action | /serving/TrainingsUsers/:action/* | {"action":"add","controller":"TrainingsUsers","plugin":null,"prefix":"Serving"} |
| serving:_controller:index | /serving/{controller} | {"action":"index","plugin":null,"prefix":"Serving"} |
| serving:_controller:_action | /serving/{controller}/{action}/* | {"action":"index","plugin":null,"prefix":"Serving"} |
| debugkit.toolbar:clearcache | /debug-kit/toolbar/clear-cache | {"action":"clearCache","controller":"Toolbar","plugin":"DebugKit"} |
| debugkit.requests:view | /debug-kit/toolbar/* | {"action":"view","controller":"Requests","plugin":"DebugKit"} |
| debugkit.panels:view | /debug-kit/panels/view/* | {"action":"view","controller":"Panels","plugin":"DebugKit"} |
| debugkit.panels:index | /debug-kit/panels/* | {"action":"index","controller":"Panels","plugin":"DebugKit"} |
| debugkit.composer:checkdependencies | /debug-kit/composer/check-dependencies | {"action":"checkDependencies","controller":"Composer","plugin":"DebugKit"} |
| debugkit.mailpreview:index | /debug-kit/mail-preview | {"action":"index","controller":"MailPreview","plugin":"DebugKit"} |
| debugkit.mailpreview:email | /debug-kit/mail-preview/preview | {"action":"email","controller":"MailPreview","plugin":"DebugKit"} |
| debugkit.mailpreview:email | /debug-kit/mail-preview/preview/* | {"action":"email","controller":"MailPreview","plugin":"DebugKit"} |
| debugkit.mailpreview:sent | /debug-kit/mail-preview/sent/{panel}/{id} | {"action":"sent","controller":"MailPreview","plugin":"DebugKit"} |
| debugkit.dashboard:index | /debug-kit | {"_method":"GET","action":"index","controller":"Dashboard","plugin":"DebugKit"} |
| debugkit.dashboard:index | /debug-kit/dashboard | {"_method":"GET","action":"index","controller":"Dashboard","plugin":"DebugKit"} |
| debugkit.dashboard:reset | /debug-kit/dashboard/reset | {"_method":"POST","action":"reset","controller":"Dashboard","plugin":"DebugKit"} |
+-------------------------------------+-------------------------------------------+----------------------------------------------------------------------------------+