路由和管理范围不能正常工作

Routing and admin scope not working well

我的 routes.php 文件中有此代码:

Router::scope('/admin', function (RouteBuilder $routes) {
    $routes->connect('/', ['controller' => 'Users', 'action' => 'dashboard']);
    $routes->connect('/login', ['controller' => 'Users', 'action' => 'login']);
    $routes->connect('/logout', ['controller' => 'Users', 'action' => 'logout']);
});

Router::scope('/', function (RouteBuilder $routes) {
    $routes->connect('/', ['controller' => 'Pages', 'action' => 'display', 'home']);

    $routes->connect('/pages/*', ['controller' => 'Pages', 'action' => 'display']);

    $routes->fallbacks(DashedRoute::class);
});

当我与未经身份验证的用户一起访问 http://localhost/admin 时,我想被重定向到 http://localhost/admin/login。此时我被重定向到 http://localhost/login

如果我更改代码,在管理范围内添加 $routes->fallbacks(DashedRoute::class); 行,登录重定向将正常工作,但我的所有链接都将生成带有 admin 前缀,例如:

<?= $this->Html->link($category->name, ['controller' => 'categories', 'action' => 'view', $category->id]) ?>

将生成:

http://localhost/admin/categories/view/13

而不是:

http://localhost/categories/view/13

我该如何解决这个问题?

这似乎不是路由问题。不能只在 Auth 数组中指定 unauthorizedRedirect 吗?像这样:

$this->loadComponent('Auth', [
    //...
    'unauthorizedRedirect' => [
        'controller'=>'Users',
        'action'=>'login',
        'prefix'=>'admin'
    ]
]);

更多信息here in the CakePHP book

unauthorizedRedirect: Controls handling of unauthorized access. By default unauthorized user is redirected to the referrer URL or loginAction or ‘/’.