2015-12-18 3 views
6

У меня есть следующие строки кода, которые повторяются не только во многих методах контроллера, но и в нескольких контроллерах.Как использовать кеш и сохранить код DRY в Laravel 5

$Categories = \Cache::rememberForever('Categories', function() { 
    return \App\Models\Skill\Category_Model::all(); 
}); 

Есть ли какой-либо полезный способ, которым я могу использовать это, чтобы повторный код можно было удалить?

ответ

4

Использование Repository для доступа к Category_Model модели:

//REPOSITORY CLASS 
class CategoryRepository 
{  
    public function getAll() 
    { 
     return \Cache::rememberForever('Categories', function() { 
      return \App\Models\Skill\Category_Model::all(); 
     }); 
    }  
} 

В контроллерах, где вам нужно, чтобы получить категории, впрыснуть хранилище из конструктора контроллера, и доступ к хранилищу из методов:

//INJECT THE REPOSITORY IN YOU CONTROLLER'S CONSTRUCTOR 
public function __construct(CategoryRepository $catRepo) 
{ 
    $this->catRepo = $catRepo; 
} 

public function index() 
{ 
    //get the categories from the repository 
    $categories = $this->catRepo->getAll(); 
} 

Это будет держать ваш код DRY, как вам нужно только позвонить $this->catRepo->getAll();, чтобы получить все категории

+1

@PankajGarg где угодно, может быть, например, app/repositories/namespaced как \ App \ Repositories \ – andr

+1

Вы можете создать этот класс в любом месте внутри каталога приложения, просто вам нужно указать надлежащее пространство имен в классе и использовать этот класс, используя это пространство имен в контроллере. –

+0

@PankajGarg: я упростил класс репозитория. Ошибка возникает из-за проблемы с пространством имен. Где размещен ваш файл класса? Вы должны установить пространства имен соответственно вашей структуре папок. Или вы можете использовать полное имя: глядя на свой код в конструкторе контроллера, вы можете указать '\ App \ Models \ Skill \ CategoryRepository $ catRepo' вместо' CategoryRepository', если класс 'CategoryRepository' находится в папке' Skill' – Moppo

Смежные вопросы