Laravel 5.5:如何定义可在所有控制器中使用的全局变量?
Posted
技术标签:
【中文标题】Laravel 5.5:如何定义可在所有控制器中使用的全局变量?【英文标题】:Laravel 5.5 : How to define global variable that can be used in all controllers ? 【发布时间】:2018-08-11 10:32:10 【问题描述】:你好开发人员和编码员,
我的问题是如何定义一个全局变量,它可以用于 Laravel 中的所有控制器?
我在 AppServiceProviders 的启动方法中定义了一个变量$company
- 我在所有刀片视图中都使用它,但我不能在控制器文件中使用它,它给出了错误,undefined variable $company
p>
class AppServiceProvider extends ServiceProvider
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
View::share('key', 'value');
Schema::defaultStringLength(191);
$company=DB::table('company')->where('id',1)->first();
View::share('company',$company);
/**
* Register any application services.
*
* @return void
*/
public function register()
//
请指导我,感谢您的努力和时间:)
【问题讨论】:
如果它是静态的,您可以使用您创建的 .env 文件或配置文件。但如果它是动态变量,您可以使用会话或缓存在任何地方使用它。 @ErkanÖzkök,正如您在帖子中看到的,我正在使用查询生成器从数据库中获取记录,该变量是动态的而不是静态的。 我们为什么要使用 AppServiceProvider(@ErkanÖzkök 回答)?我可以使用任何其他服务提供吗?? 【参考方案1】:在运行时设置配置变量
class AppServiceProvider extends ServiceProvider
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
View::share('key', 'value');
Schema::defaultStringLength(191);
$company=DB::table('company')->where('id',1)->first();
// View::share('company',$company);
config(['yourconfig.company' => $company]);
用法:
config('yourconfig.company');
【讨论】:
但是如果数据库还不存在怎么办?【参考方案2】:好的,所以除非你想把它保存在你的会话中,我绝对不推荐,缓存似乎也不是一个最好的主意,或者通过框架内的配置系统设置它(已经是 3适用于不同问题的不同解决方案)我会从思考该变量将包含什么开始,如果这只是公司模型的集合,那么您基本上可以通过使用 Laravel Eloquent 方法在任何控制器中使用它。
我推荐的是$company = Company::where('foo', 'bar')->first();
,或者只是一些数据提供者,它会以 Laravel 集合的形式返回你需要的所有信息。
tl;博士
#recommended way that's reusable throughout whole app
Company::find(1); // instead of DB::table('company')->where('id', 1)->get();
希望对您有所帮助。
【讨论】:
Company::find(1);
和 DB::table('company')->where('id', 1)->get();
。两者都是一样的,一个是雄辩的,一个是查询构建方式,可以使用任何方式,但我想要一个跨所有控制器的全局变量
我不确定使用全局变量是否是特别好的做法,并且 config 应该用于配置变量(因此名称)因此我仍然认为除非你想将这种数据保留在里面对于 Redis,我提出的解决方案是给定问题的最佳解决方案。以上是关于Laravel 5.5:如何定义可在所有控制器中使用的全局变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 5.8 中使 chart.js 动画/增长/活着?
Laravel 5.5 FormRequest 自定义错误消息