如何在Laravel 5中使用缓存并保留代码DRY

6 php dry laravel laravel-5 laravel-5.1

我有以下几行代码重复,不仅在Controller的许多方法中,而且在多个Controller中.

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

有没有什么有用的方法可以使用它,这样可以删除重复的代码?

Mop*_*ppo 4

使用存储库访问Category_Model模型:

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

在需要获取类别的控制器中,从控制器的构造函数注入存储库,并从方法访问存储库:

//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();  
}
Run Code Online (Sandbox Code Playgroud)

这将使您的代码保持干燥,因为您只需要调用$this->catRepo->getAll();即可获取所有类别