代码之家  ›  专栏  ›  技术社区  ›  Saurabh Mistry

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

  •  1
  • Saurabh Mistry  · 技术社区  · 6 年前

    我的问题是如何定义一个全局变量,它可以用于 拉维所有的控制器?

    我定义了一个变量 $company AppServiceProviders的启动方法 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 回复  |  直到 6 年前
        1
  •  4
  •   kenken9999    6 年前

    在运行时设置配置变量

    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
  •  -1
  •   Kuba Biały    6 年前

    好吧,所以除非你想把它保存在会话中(我绝对不建议这样做),否则缓存似乎不是一个好主意,或者通过框架内的配置系统设置它(这已经是3种不同的解决方案,适合不同的问题),我会从这个变量将包含什么开始思考,如果这只是一个公司模型的集合,那么您基本上可以通过使用Laravel雄辩的方法在任何控制器中使用它。

    我推荐的是 $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();