2016-05-04 1 views
0

Je suis nouveau à laravel; Je voudrais enregistrer une variable d'objet avec la clé "myObject", de sorte qu'il puisse être accédé par tous les utilisateurs utilisant l'application courante, et puisse être accédé dans n'importe quel contrôleur ou vue. l'objet peut être changé (utiliser une méthode set) quand je le veux. je cherche quelque chose comme ServletContext dans JEE ou quelque chose comme le registre dans Zend. Merci à l'avance pour vous code détailléLaravel 5 objet partagé pour l'application web

Répondre

0

Vous pouvez lier l'objet dans Laravel Service Container comme une instance par exemple, vous pouvez créer votre instance d'objet en utilisant quelque chose comme ceci:

$object = new SomeClass(...); 
App::instance('myObject', $myObject); 

Dans ce cas, vous pouvez lier l'objet à un fournisseur de services. Vous pouvez utiliser le App\Providers\AppServiceProvider fourni avec Laravel. Donc, dans ce cas, vous pouvez faire quelque chose comme ceci:

// Import the dependencies using "use", omitted here 
class AppServiceProvider extends ServiceProvider { 

    public function boot() 
    { 
     // ... 
    } 

    public function register() 
    { 
     $object = new MyObjectClass(); 
     $this->app->instance('myObject', $object); 

     // Share the instance globally in all views 
     view()->share('myObject', $object); 
    } 
} 

Plus tard, vous pouvez utiliser $object = app('myObject') pour obtenir l'instance et si vous souhaitez l'utiliser dans les vues globalement, vous pouvez utiliser view()->share('myObject', $object) afin que vous puissiez accéder à l'objet directement à partir de n'importe quelle vue usinf $myObject variable d'instance. Il existe d'autres façons de lier un objet dans le conteneur, mais cette approche répond à vos besoins. Consultez la documentation pour plus d'informations.

+0

Merci pour votre partage. je peux maintenant l'obtenir du contrôleur; comment puis-je mettre à jour l'instance à partir d'une action? quelque chose comme "set" nouvelle instance mise à jour à l'objet de l'application – user3094745

+0

Probablement, il suffit de re-lier l'instance dans contaainer comme je l'ai fait dans 'Service Provider'. Consultez la référence [api] (https://laravel.com/api/5.2/Illuminate/Container/Container.html) pour connaître les méthodes disponibles. –

+0

Je l'ai fait avant, mais il n'y a aucun guide sur la façon d'accéder au conteneur de l'application à partir du contrôleur. toute suggestion – user3094745