所以我决定从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'), '2000', 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), 0, 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并且它有效,但我不知道这是否是解决方案。
答案 0 :(得分:0)
正如您注意到您将数组作为$ key值传递,最安全的方法是替换代码
$parts = array_slice(str_split($hash = md5($key), 2), 0, 2);
用
$parts = array_slice(str_split($hash = md5(json_encode($key)), 2), 0, 2);
注意:我不确定你运行的是什么版本的php,但是json_encode(...)通常比序列化更快(...)