c语言编程笔录

首页 >   > 笔记大全

笔记大全

CakePHP怎么进行路由分组

更新时间:2023-10-30

什么是路由分组?

CakePHP 是一款基于 MVC 模式的 PHP 框架,为了简化 URL 地址的复杂度和方便管理路由,支持在路由系统中进行分组。路由分组使得路由代码更加可读性强,易于维护。使用路由分组还可以使相关的路由可以归于一个更高层的架构中,而不影响其他部分。

如何进行路由分组?

在 CakePHP 中,路由分组通过设置路由前缀(prefix)来实现。可以通过对控制器的定义来设置路由前缀,代码示例如下:

    //以 CakePHP 官网的示例代码为例
    //src/Controller/BlogController.php
    namespace App\Controller;
    
    use App\Controller\AppController;
    
    class BlogController extends AppController
    {
        public function initialize()
        {
            parent::initialize();
            $this->loadComponent('Paginator');
            $this->loadComponent('Flash'); 
        }
    
        public function index()
        {
            $this->paginate = [
                'contain' => ['Users'],
            ];
            $blogs = $this->paginate($this->Blogs);
    
            $this->set(compact('blogs'));
        }
    
        public function view($id = null)
        {
            $blog = $this->Blogs->get($id, [
                'contain' => ['Users'],
            ]);
    
            $this->set('blog', $blog);
        }
    }
    
    //routes.php
    use Cake\Routing\RouteBuilder;
    use Cake\Routing\Router;
    
    Router::prefix('admin', function (RouteBuilder $routes) {
        $routes->connect('/', ['controller' => 'Dashboard', 'action' => 'index']);
        $routes->fallbacks();
    });
    
    Router::prefix('Blog', function (RouteBuilder $routes) {
        $routes->connect('/index', ['controller' => 'Blog', 'action' => 'index']);
        $routes->connect('/:id', ['controller' => 'Blog', 'action' => 'view'])
            ->setPass(['id']);
        $routes->fallbacks();
    });
    

路由分组的默认路由前缀是什么?

路由分组的默认前缀是 “/”。在 routes.php 中定义 “/” 路由,并定义了编写相应控制器可访问的页面:

    Router::connect('/', array('controller' => 'users', 'action' => 'index')); 
    

路由分组的顺序是否有影响?

路由分组的顺序是有影响的,它们按照从上到下的顺序进行匹配,并且只有第一个路径与 URL 匹配时,它才被调用。例如下面的代码示例:

    //routes.php
    Router::prefix('admin', function (RouteBuilder $routes) {
        $routes->connect('/', ['controller' => 'Dashboard', 'action' => 'index']);
        $routes->fallbacks();
    });
    
    Router::prefix('Blog', function (RouteBuilder $routes) {
        $routes->connect('/index', ['controller' => 'Blog', 'action' => 'index']);
        $routes->connect('/:id', ['controller' => 'Blog', 'action' => 'view'])
            ->setPass(['id']);
        $routes->fallbacks();
    });
    

当使用 “/admin” 这个前缀时,将执行 “admin 变量” 分组路由,而且只有在 “/admin” 路径在 URL 中时,才会执行路由处理程序。如果您反过来在路由文件中定义路由分组,它们就会按照定义的顺序而无法按照预期工作。

总结:通过使用路由前缀,CakePHP 支持路由分组,提高了代码的可读性和管理性。默认路由前缀是 “/”。“路由分组的顺序是有影响的,按照从上到下的顺序进行匹配,并且只有第一个路径与 URL 匹配时,它才被调用。程序员需要根据实际情况合理设置路由前缀,避免混淆。