Php Laravel 5.5:如何定义可用于所有控制器的全局变量?
大家好,开发人员和编码人员 我的问题是如何定义一个全局变量,它可以在 拉威尔的所有控制器 我已经在AppServiceProviders的启动方法中定义了一个变量Php Laravel 5.5:如何定义可用于所有控制器的全局变量?,php,laravel,global-variables,laravel-5.5,controllers,Php,Laravel,Global Variables,Laravel 5.5,Controllers,大家好,开发人员和编码人员 我的问题是如何定义一个全局变量,它可以在 拉威尔的所有控制器 我已经在AppServiceProviders的启动方法中定义了一个变量$company,我在所有刀片视图中都使用它,但我不能在控制器文件中使用它,它会给出错误,未定义的变量$company class AppServiceProvider extends ServiceProvider { /** * Bootstrap any application services. *
$company
,我在所有刀片视图中都使用它,但我不能在控制器文件中使用它,它会给出错误,未定义的变量$company
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()
{
//
}
}
请指导我,谢谢你的努力和时间:)好的,除非你想在你的会话中保留它,我绝对不推荐,缓存似乎不是最好的主意,或者通过框架内的配置系统设置它(已经有3种不同的解决方案适合不同的问题)我会从思考这个变量将包含什么开始,如果这只是一个公司模型的集合,那么你基本上可以在任何控制器中使用它,只要使用Laravel雄辩的方法 我推荐的是
$company=company::where('foo','bar')->first()代码>,或者只是一些数据提供程序,它将以Laravel集合的形式返回您需要的所有信息
tl;博士
希望有帮助。在运行时设置配置变量
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');
如果它是静态的,您可以使用您创建的.env文件或配置文件。但如果它是动态变量,您可以使用会话或缓存从任何地方使用它。@ErkanÖzkök,正如您在帖子中看到的,我正在使用查询生成器从数据库获取记录,该变量是动态的而不是静态的。为什么我们要使用AppServiceProvider(由@ErkanÖzkök回答)?我可以使用任何其他提供的服务吗???Company::find(1)代码>和DB::table('company')->where('id',1)->get()代码>。两者都是一样的,一个是雄辩的,一个是查询构建方式,使用任何方式,但我想要一个跨越所有控制器的通用变量我不确定使用全局变量是否是一个特别好的实践,配置变量应该使用配置(因此名称)因此,我仍然认为,除非您希望将此类数据保存在Redis中,否则我提出的解决方案是针对给定问题的最佳解决方案。但如果db还不存在呢?
config('yourconfig.company');