2015-12-18 21 views
6

Ho le seguenti righe di codice che vengono ripetute, non solo in molti metodi di un controller ma anche in più di un controller.Come utilizzare Cache e Keep code DRY in Laravel 5

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

C'è qualche modo utile che posso usare questo, in modo che il codice ripetuto possa essere rimosso?

risposta

4

Utilizzare un repository per accedere al modello Category_Model:

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

Nei controller in cui è necessario ottenere le categorie, iniettare il repository dal costruttore del controllore, e accedere al repository dai metodi:

//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(); 
} 

Ciò manterrà il vostro codice di DRY, come avete solo bisogno di chiamare $this->catRepo->getAll(); per ottenere tutte le categorie

+1

@PankajGarg ovunque tu voglia, potrebbe essere ad es. app/repositories/e namespace come \ App \ Repositories \ – andr

+1

È possibile creare questa classe in qualsiasi directory interna dell'app, basta specificare lo spazio dei nomi appropriato nella classe e utilizzare questa classe utilizzando tale spazio dei nomi nel controller. –

+0

@PankajGarg: ho semplificato la classe repository. L'errore deriva da un problema di spazio dei nomi. Dove si trova il file di classe? È necessario impostare gli spazi dei nomi in base alla struttura delle cartelle. Oppure puoi usare un nome completo: guardando il tuo codice nel costruttore del controllore puoi specificare '\ App \ Models \ Skill \ CategoryRepository $ catRepo' invece di' CategoryRepository' se la classe 'CategoryRepository' si trova nella cartella' Skill' – Moppo