Laravel 5.5 : 如何定义可以在所有控制器中使用的全局变量?

Laravel 5.5 : How to define global variable that can be used in all controllers ?

您好开发人员和编码人员,

My question is How to define a global variable , that can be used in all controllers in Laravel ?

我在 AppServiceProviders 的启动方法 中定义了一个变量 $company - 我在所有 blade 视图中使用它,但我不能在控制器中使用它文件,它给出错误,undefined variable $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 [=20 在任何控制器中使用它=] 方法。

我推荐的是 $company = Company::where('foo', 'bar')->first();,或者只是一些数据提供者,可以 return 以 Laravel 集合的形式提供您需要的所有信息。

tl;博士

#recommended way that's reusable throughout whole app
Company::find(1); // instead of DB::table('company')->where('id', 1)->get();

希望对您有所帮助。

在运行时设置配置变量

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');