php – Laravel 5 Cache / Paginate问题

前端之家收集整理的这篇文章主要介绍了php – Laravel 5 Cache / Paginate问题前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
所以我决定从Laravel 4到5,这花了我大约1-2天,因为我几乎不知道如何进行过渡.在为我的应用程序进行升级时,我遇到了Json Pagination的一个小问题.

这段代码允许PageQuery通过KnockoutJS进行Paginated

/**
 * Builds paginate query with given parameters.
 * 
 * @param  array   $params
 * @param  integer $page
 * @param  integer $perPage
 * 
 * @return array
 */
public function buildPaginateQuery(array $params,$page = 1,$perPage = 15)
{
    $query = $this->model;

    $query = $this->appendParams($params,$query);

    $count = (new Cache)->remember('count','2000',function() use ($query){
        return $query->count();
    });

    $totalPages = $count / $perPage;

    $query = $query->skip($perPage * ($page - 1))->take($perPage);

    $query = $query->order(isset($params['order']) && $params['order'] ? $params['order'] : null);

    //$query = $query->cacheTags(array($this->model->table,'pagination'))->remember(2000);

    $query = (new Cache)->remember(array($this->model->table,'pagination'),function() use ($query){
        return $query;
    });

    return array('query' => $query,'totalPages' => $totalPages,'totalItems' => $count);
}

最终导致此屏幕截图中出现此错误

错误指向上面的代码和此代码

/**
 * Get the full path for the given cache key.
 *
 * @param  string  $key
 * @return string
 */
protected function path($key)
{
    $parts = array_slice(str_split($hash = md5($key),2),2);
    $path  = $this->directory() . '/'.join('/',$parts).'/'.$hash;

    //unset the tags so we use the base cache folder if no
    //tags are passed with subsequent call to the same instance
    //of this class
    //$this->tags = array();

    return $path;
}

我使用名为TaggedFile的自定义缓存驱动程序.这在L4中运行良好但遇到错误,因为在缓存别名中删除了一些文件.像StoreInterface一样.我可以收到一些帮助吗?如果你需要我发布我会发布的任何内容.

更多东西:

在我使用它来注册global.PHP中的taggedFile驱动程序之前:

Cache::extend('taggedFile',function($app)
{
    return new Illuminate\Cache\Repository(new Lib\Extensions\TaggedFileCache);
});

我不知道究竟要把它放在哪里.有谁知道相当于那个?我尝试将它放在AppServiceProvider中但是出现了一个错误

Call to undefined method Illuminate\Support\Facades\Cache::extend()

这曾经在L4工作,所以我决定进入供应商文件夹手动找到问题所在….

这只有:getFacadeAccessor(L4也只有扩展功能)
所以我决定使用getFacadeAccessor并且它有效,但我不知道这是否是解决方案.

正如您所注意到的那样,您将数组作为$key值传递,最安全的方法是替换代码
$parts = array_slice(str_split($hash = md5($key),2);

$parts = array_slice(str_split($hash = md5(json_encode($key)),2);

注意:我不确定你运行的是什么版本的PHP,但是json_encode(…)通常比序列化更快(…)

猜你在找的Laravel相关文章