CakePHP 3在某些情况下使用默认路由

时间:2018-03-20 14:20:03

标签: cakephp cakephp-3.0

我有一个CakePHP 3.5网站。有必要设置没有像/ pages / slug这样的url前缀的slugs,所以我写了以下规则:

$routes->connect(
    '/:slug',
    ['controller' => 'Pages', 'action' => 'redirectPage']
)
->setMethods(['GET', 'POST'])
->setPass(['slug'])
->setPatterns([
    'slug' => '[a-z0-9\-_]+'
]);

它很好用,但在某些情况下我希望cakePHP默认路由(Controller / Action / Params)。例如,我想要/ admin / login来调用' login'行动在' AdminController'。 我有两个不需要精确路线的想法,但我不能让它们中的任何一个起作用:

  1. 按模式过滤一些字符串:如果我可以过滤一些字符串会很好,如果slug不匹配模式,它将简单地跳过路由规则。
  2. 创建' / admin /:action'路由规则,但后来我不能使用:action作为动作变量。它会导致错误。

    $routes->connect(
        '/admin/:action',
        ['controller' => 'Admin', 'action' => ':action']
    )
    
  3. 有什么想法吗? 感谢

2 个答案:

答案 0 :(得分:4)

您可以将prefix用于管理员限制区域。 例如:

Router::prefix('admin', function ($routes) {
    $routes->connect('/', ['controller' => 'Users', 'action' => 'login']);
    $routes->fallbacks(DashedRoute::class);
});

$routes->connect('/:slug' , [
    'controller' => 'Pages', 
    'action' => 'display', 
    'plugin' => NULL
], [
    'slug' => '[A-Za-z0-9/-]+', 
    'pass' => ['slug']
]);

现在,例如,路径/admin/dashboard/index将执行Admin“子名称空间”\App\Controller\Admin\DashboardController::index()

中的方法

在文档中很好地描述了它:Image Asset Studio

答案 1 :(得分:1)

试试这个:

$routes->connect(
    '/admin/:action',
    ['controller' => 'Admin'],
    ['action' => '(login|otherAllowedAction|someOtherAllowedAction)']
);

此外,你的slug路线似乎没有抓住/admin/:action路线,那里不允许使用b / c破折号:[a-z0-9\-_]+