2015-10-21 10 views
5

ho creato un menu guidato base di dati usando un Controller,database a menu che può essere caricato in vista

HomeController estende controller cui è caricato il menu in funzione di costrutto del controller.

HomeController.php

class HomeController extends Controller 
{ 


    public function __construct() 
    { 
     parent::__construct(); 
     $this->middleware('auth'); 
    } 

    public function index(){ 
     $data['menu'] = $this->menu; 
     return view('home', $data); 
    } 
} 

controller.php

public function __construct() 
    { 
     $this->user = Auth::user(); 

     $menu = new Menu(); 

     if($this->user != NULL && $this->user != ""){ 
      $this->menu = $menu->getMenu($this->user->user_id); 
     } 
    } 

Come posso, chiamare la funzione dritto a livello di vista perché in questo momento, anche se il menu viene caricato nel costruttore, Avrò comunque bisogno di passare il menu alla vista che rende le cose un po 'ridondanti.

P/S: Usando laravel 5.1

+2

È necessario visualizzare compositori: http://laravel.com/docs/5.1/views#view-composers È possibile passare variabili a tutte le viste o specifiche. – Iamzozo

risposta

3

Genera un nuovo ServiceProvider da artigianale dal seguente comando

php artisan make:provider ComposerServiceProvider 

questo creerà un nuovo nome di file ComposerServiceProvider.php sotto app/fornitori. Nella funzione di avvio di questo fornitore di servizi di nuova creazione è possibile creare funzioni con chiusura come segue:

view()->composer('partials.navbar', function ($view) { 
     $view->with('genre', Genre::all()); 
    }); 

qui la vista in questione è navbar.blade.php in Visualizza/parziali che avrà una variabile denominata genere disponibili attraverso la tua app.

Per rendere il vostro codice più pulito, ciò che potete fare è creare una nuova funzione nel ComposerServiceProvider e nominarla qualsiasi cosa diciamo partialnav. Poi farà il seguente:

public function boot() 
{ 
    $this->partialNav(); 
} 

//create a function independently 

public function partialnav() 
{ 
    //code goes here 
} 

Se si vuole separare ancora di più è possibile creare una nuova cartella in app/Http nome si permette di dire ViewCompoers, Sotto questa cartella creare un nuovo file chiamato NavbarComposer.php con la codice seguente:

class NavbarComposer { 


/** 
* Create a new profile composer. 
* 
* @param UserRepository $users 
* @return void 
*/ 
public function __construct() 
{ 
    // Dependencies automatically resolved by service container... 
} 

/** 
* Bind data to the view. 
* 
* @param View $view 
* @return void 
*/ 
public function compose(View $view) 
{ 
    //write your code to fetch the data 
    // and pass it to your views, following is an example 
    $genre = genre::all(); 
    $view->with('genre', $genre); 
} 
} 

ora torna alla funzione partialnav del vostro ComposerServiceProvider

public function partialNav() 
{ 
    view()->composer('partials.nav', 'App\Http\ViewComposers\NavbarComposer'); 
} 

non dimenticate di aggiungere questo ServiceProvider appena creato nella configurazione/app .php

App\Providers\ComposerServiceProvider::class, 
Problemi correlati