【问题标题】:CakePHP 3 use default routing in some casesCakePHP 3 在某些情况下使用默认路由
【发布时间】:2018-03-20 14:20:03
【问题描述】:

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

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

它工作得很好,但在某些情况下,我希望 cakePHP 作为默认路由(控制器/动作/参数)。例如,我希望 /admin/login 在 'AdminController' 中调用 'login' 操作。 我有两个不需要精确路由的想法,但我无法让它们中的任何一个起作用:

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

    $routes->connect(
        '/admin/:action',
        ['controller' => 'Admin', 'action' => ':action']
    )
    

有什么想法吗? 谢谢

【问题讨论】:

    标签: cakephp cakephp-3.0


    【解决方案1】:

    您可以将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 "subnamespace" \App\Controller\Admin\DashboardController::index() 中的方法

    在文档中有很好的描述:https://book.cakephp.org/3.0/en/development/routing.html#prefix-routing

    【讨论】:

      【解决方案2】:

      试试这个:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-04-25
        • 1970-01-01
        • 1970-01-01
        • 2012-07-25
        • 2023-02-06
        • 2011-06-04
        • 2015-05-02
        相关资源
        最近更新 更多