2014-05-13 4 views
1

J'ai une question de faire quelques éléments disponibles dans un fichier de vueFaire des choses disponibles dans un fichier de vue Laravel

permet de dire im la construction d'une boutique en ligne et sur chaque page je subirai ma barre latérale, shoppingcart, utilisateur message d'accueil en haut.

Comment puis-je rendre ces choses disponibles dans tous mes fichiers de vue?

je pouvais faire une classe, permet de dire la classe Frontend

que je pouvais faire quelque chose comme ceci:

class Frontend { 

    static $me; 

    public function get(){ 
     if(!self::$me){ 
      self::$me = new self(); 
     } 
     return self::$me; 
    } 

    private function getShoppingCart(){ 
     // do things 
    } 

    public function getData(){ 


     return array(
       'Username' => User::find(1)->UserName, 
       'Cart' => $this->getShoppingCart() 
     ); 

    } 

} 

Maintenant, dans mon contrôleur i pourrait passer cet objet Frontend dans la vue

View::make('file.view')->with(array('data' => Frontend::get()->getData())); 

Mais de cette façon, je vais finir avec une classe de dieu contenant beaucoup trop de choses et dans chaque méthode de contrôleur, je devrais transmettre ces données, ce qui n'est pas pertinent pour le contrôleur meth od

Existe-t-il un moyen pour Laravel de rendre des données spécifiques disponibles dans tous les fichiers de vue?

Merci!

Répondre

1

Pour tout nettoyer, chaque partie de la page doit être son propre fichier *.blade.php qui serait mis en place à l'aide d'un modèle maître de toutes sortes.

master.blade.php

@yield('includes.sidebar') 

@yield('users.greeting') 

@yield('store.shoppingcart') 

Ensuite, vous pouvez utiliser view composers de sorte que chaque fois que ces vues sont chargées, les données que vous voulez est injecté dans les. Je créerais probablement un nouveau fichier qui serait automatiquement chargé, ou si vous aviez des fournisseurs de services pour les parties séparées de votre application que ces vues utiliseraient, cela irait également très bien là-dedans.

View::composer('users.greeting', function($view) 
{ 
    $view->with('user', Auth::user()); 
}); 

Dans ce cas, le modèle utilisateur est disponible dans votre vue. Cela facilite la gestion des données injectées dans vos vues.

1

Vous êtes proche avec votre idée de 'classe dieu'. Définition d'une variable de données $ dans un BaseController m'a aidé à des problèmes similaires

class BaseController extends Controller { 


protected $data; 

public function __construct() { 

    $this->data['Username'] = User::find(1)->UserName 
    $this->data['Cart'] = $this->getShoppingCart() 
} 
} 

class Frontend extends BaseController { 

    function someMethod(){ 
     View::make('file.view', $this->data) 
    } 
}  
Questions connexes