0
我是laravel的新手;我想用关键字“myObject”注册一个对象变量,这样它可以被所有使用当前应用程序的用户加入,并且可以在任何控制器或视图中加入。只要我想要,对象可以改变(使用set方法)。我在JEE中寻找类似ServletContext的东西,或者像Zend中的注册表那样。 预先感谢您详细的代码Laravel 5共享Web应用程序的对象
我是laravel的新手;我想用关键字“myObject”注册一个对象变量,这样它可以被所有使用当前应用程序的用户加入,并且可以在任何控制器或视图中加入。只要我想要,对象可以改变(使用set方法)。我在JEE中寻找类似ServletContext的东西,或者像Zend中的注册表那样。 预先感谢您详细的代码Laravel 5共享Web应用程序的对象
您可以将对象转换成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
实例变量。还有其他方法可将物品绑定到容器中,但此方法可满足您的需求。检查文档以获取更多信息。
感谢您的分享。我现在可以从控制器中获得它;我如何从动作更新实例?像“设置”新实例更新到应用程序对象 – user3094745
可能只是将实例重新绑定到contaainer中,就像我在“服务提供者”中所做的那样。查看可用方法的[api](https://laravel.com/api/5.2/Illuminate/Container/Container.html)参考。 –
我之前做过,但没有指导如何从控制器访问应用程序容器。任何建议 – user3094745