近一年来,一直在用slim框架写东西,私底下。其实一直在写东西,但是到现在真的一点输出都没有,不过学了很多小技巧,自己写个小验证器什么的,对框架的一些了解也有了加深了。最好的是,这些技巧中的许多都被用在了工作中。好了,吐槽了这么多,我又要废话了,我写了一年才到页码,你信吗?但这是真的。写了一年,代码终于积累了300行,可以进入分页的过程了。之前用laravel的时候,觉得Eloquent很麻烦。麻烦不是说用起来麻烦,是看代码麻烦,不过用起来还是很爽的。所以当我使用slim需要连接数据库的时候,我毫不犹豫的继续使用Eloquent。写pagination的时候发现调用方法失败,于是继续介绍illuminate/pagination。查询有问题,无法正确获取页码,其他一些参数也不正确,而且到了前端,因为使用的模板是twig,所以无法在代码中调用模型的相关方法,如刀片模板。调用还得延长twig,又是一件麻烦事。在这种情况下,我在代码中调用它,然后输出到模板中,但是当我想偷懒使用链接输出分页部分时,却报错了。在看了报错之后,发现要引入blade等一系列的东西,所以引入了这么多东西,还不如直接用laravel。所以,在使用slim不变的情况下,我们自己扩展一个分页方法。一开始想继承model,把方法写在里面。后来,我发现这是不可能的。这样做的原因是,大多数被模型替换的方法实际上是在创建新的构建器后在链中调用的。这里我再说一点,laravel中相同的类名会出现在很多包中,大家自己查的时候注意不要看错了。(其实集成model也是可以的,但是太麻烦了,而且不能链式调用)所以继承model后不行,我们从builder入手,可以通过找到这个方法google并查看代码/***为模型创建一个新的Eloquent查询构建器。**@param\Illuminate\Database\Query\Builder$query*@return\Illuminate\Database\Eloquent\Builder|static*/publicfunctionnewEloquentBuilder($query){returnnewBuilder($query);}这个方法用到了在模型中生成一个新的构建器,所以我们只需要在我们的模型中覆盖这个方法。toBase()->getCountForPagination())?$this->forPage($page,$perPage)->get($columns):$this->model->newCollection();//计算总页数$totalPage=$total?ceil($total/$page):0;//输出return(object)['currentPage'=>$page,'perPage'=>$perPage,'totalCount'=>$total,'totalPage'=>$totalPage,'data'=>$results,];你可以看到我们已经定义了一个myPaginate方法来实现我们的分页。其实这样做的目的只是为了覆盖输出时内置分页的一些操作,输出我们想要的各种数据。接下来,我们可以在代码和模板的任何地方使用我们输出的数据。即使我们想在laravel中实现links方法,只要我们展开twig就ok了。具体怎么做,可以等下一篇。
