Итак, я решил отправиться из Laravel 4 в 5, который занял у меня около 1-2 дней, потому что я едва знал, как сделать переход. При выполнении Upgrade для моего приложения я столкнулся с небольшой проблемой с Json Pagination.Laravel 5 Cache/Paginate Issue
Этот код является то, что позволяет PageQuery быть разбитым на страницы Via KnockoutJS
/**
* 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, но натолкнулось на ошибки, потому что в Cache Alias были удалены файлы. Как и StoreInterface. Могу ли я получить некоторую помощь для этого? Если вам нужно, чтобы я опубликовал все, что захочу.
Больше Материал:
Прежде чем я использовал это, чтобы зарегистрировать драйвер taggedFile в global.php:
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, и это сработало, но я не знаю, было ли это решение или нет.