2016-05-04 31 views
0

我是laravel的新手;我想用关键字“myObject”注册一个对象变量,这样它可以被所有使用当前应用程序的用户加入,并且可以在任何控制器或视图中加入。只要我想要,对象可以改变(使用set方法)。我在JEE中寻找类似ServletContext的东西,或者像Zend中的注册表那样。 预先感谢您详细的代码Laravel 5共享Web应用程序的对象

回答

0

您可以将对象转换成Laravel​​绑定,例如一个实例,你可以使用像这样创建对象实例:

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

在这种情况下,你可以绑定来自服务提供者的对象。您可以使用Laravel附带的App\Providers\AppServiceProvider。所以,在这种情况下,你可以做这样的事情:

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

以后,你可以用$object = app('myObject')来获得实例,如果你想使用它的意见全球,那么你可以使用view()->share('myObject', $object)这样你就可以访问该对象直接来自任何视图usinf $myObject实例变量。还有其他方法可将物品绑定到容器中,但此方法可满足您的需求。检查文档以获取更多信息。

+0

感谢您的分享。我现在可以从控制器中获得它;我如何从动作更新实例?像“设置”新实例更新到应用程序对象 – user3094745

+0

可能只是将实例重新绑定到contaai​​ner中,就像我在“服务提供者”中所做的那样。查看可用方法的[api](https://laravel.com/api/5.2/Illuminate/Container/Container.html)参考。 –

+0

我之前做过,但没有指导如何从控制器访问应用程序容器。任何建议 – user3094745