美文网首页创造与分享
怎么在 CakePHP 项目中集成 PJAX

怎么在 CakePHP 项目中集成 PJAX

作者: 山间一枝君兰 | 来源:发表于2018-02-07 12:32 被阅读15次

    之前发了一篇帖子提到 在 Symfony 中与 Pjax 集成,使用 Pjax 进行单页加速;这次来讲一下怎么在cakephp的项目中集成pjax;

    前端的代码与在symfony里实现是一样的,这里主要讲一下后端的部分,在symfony里我们是利用了symfony的kernel.response 事件,在cakephp里我们换个做法,使用cake支持的 middleware 机制,

    延伸

    这里延伸一点middleware相关的知识点;middleware都是大差不差的,不同于laravel的 middleware “单传”,cake的middleware采用的是“双传(double pass)”, 两种机制有什么区别有兴趣的童鞋可以去看看 php-fig 关于 middleware的讨论,传送门, psr15仍然在讨论当中,所以并没有被广大框架实现,这里我实现了一个psr15的中间件调度器 https://github.com/slince/middleware 有兴趣的可以看看。

    Middleware

    书归正传,继续说在cake实现pjax的事情, 首先我们需要创建一个middleware,在你的项目 /src/Middleware 下创建 PjaxMiddleware

    
    namespace App\Middleware;
    
    class PjaxMiddleware
    
    {
    
        public function __invoke($request, $response, $next)  //注意cake使用的是双传,所以会接收到request和response
    
        {
    
            $response = $next($request, $response);
    
            //如果是pjax请求则提取response body中相应的部分即可
    
            //由于提取代码与symfony的一致,随意不在写出来,如果有兴趣的同学可以去研究下 symfony/DomCrawler
    
        }
    
    }
    
    

    接下来注册你的middleware;打开/src/Application.php 文件,作如下修改:

    
    class Application extends BaseApplication
    
    {
    
        /**
    
        * Setup the middleware queue your application will use.
    
        *
    
        * @param \Cake\Http\MiddlewareQueue $middlewareQueue The middleware queue to setup.
    
        * @return \Cake\Http\MiddlewareQueue The updated middleware queue.
    
        */
    
        public function middleware($middlewareQueue)
    
        {
    
            $middlewareQueue
    
                ->add(ErrorHandlerMiddleware::class)
    
                ->add(AssetMiddleware::class)
    
                ->add(new RoutingMiddleware($this));
    
            //....
    
            $middlewareQueue->add(\App\Middleware\PjaxMiddleware::class);  //注册pjax middleware
    
            return $middlewareQueue;
    
        }
    
    }
    
    

    到此结束,接下来cake会自动处理pjax请求;

    使用cakephp-pjax插件

    为了更方便我做了一个cakephp的pjax插件,大家可以看看 https://github.com/slince/cakephp-pjax

    相比上述繁琐的步骤,你只需要在安装之后在 /config/bootstrap.php 里加上即可;

    
    Plugin::load('Slince/Pjax', [
    
        'bootstrap' => true,
    
    ]);
    
    

    怎么样是不是很方便。:heart:

    相关文章

      网友评论

        本文标题:怎么在 CakePHP 项目中集成 PJAX

        本文链接:https://www.haomeiwen.com/subject/pnvozxtx.html