thinkphp应用内自定义分页类
所属分类:php | 发布于 2023-12-11 22:41:40
博客的分页貌似有点问题,想修复它,结果发现没那么简单,最终发现原因是provider.php只能全局定义,不能针对单个应用定义。
就是这句话,之前看文档没注意,今天总算注意到:
provider.php
服务提供定义文件只能全局定义,不支持在应用下单独定义
这就是罪魁祸首。
自定义分页类
官方文档,如果要使用自定义类,首先要扩展一个分页驱动,然后在provider.php文件中重新绑定。
return [
'think\Paginator' => 'app\common\Bootstrap'
];
但是我们是多应用项目,想在某些应用里面自定义分页类。但是app/provider.php里面的是全局绑定,所以要找个地方来重新绑定自己的分页类。
解决方法
不卖关子,直接说解决方法,可以在两个地方绑定。
1、在app/admin/BaseController类的initialize()方法内绑定
$this->app->bind('think\Paginator', \app\common\paginator\AdminBootstrap::class);
2、在中间件中绑定
2.1、在应用middleware目录下新建PaginatorMiddleware中间件
namespace app\admin\middleware;
class PaginatorMiddleware
{
public function handle($request, \Closure $next)
{
app()->bind('think\Paginator', 'app\common\paginator\AdminBootstrap');
return $next($request);
}
}
2.1、在应用中间件配置文件中添加分页类中间件
return [
app\admin\middleware\PaginatorMiddleware::class
];