Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel为所有自定义辅助对象、控制器和模型设置全局变量_Php_Codeigniter_Global Variables_Laravel 5.4 - Fatal编程技术网

Php Laravel为所有自定义辅助对象、控制器和模型设置全局变量

Php Laravel为所有自定义辅助对象、控制器和模型设置全局变量,php,codeigniter,global-variables,laravel-5.4,Php,Codeigniter,Global Variables,Laravel 5.4,我以前在codeigniter中问过这个问题,现在我想在laravel中问一下这个问题 我想为自定义助手、模型和控制器设置一个全局变量 变量是从数据库结果中获取的 以下是一个例子: 不知道将变量放在哪里 $data= DB::table('categories')->where('id', '2')->first(); $this->product_var = $data->product; **//main global variable** 自定义帮助程序 f

我以前在codeigniter中问过这个问题,现在我想在laravel中问一下这个问题

我想为自定义助手、模型和控制器设置一个全局变量 变量是从数据库结果中获取的

以下是一个例子:

不知道将变量放在哪里

 $data= DB::table('categories')->where('id', '2')->first();
 $this->product_var = $data->product;  **//main global variable**
自定义帮助程序

function test() {
    if($this->product_var=="product name") {

    }
}
function index() {
    echo $this->product_var;
}
function test() {
    if(config('app.product_data')->product_var=="product name") {
         //do something
    }

}
function index() {
    echo config('app.product_data')->product_var;
}
我的控制器

function test() {
    if($this->product_var=="product name") {

    }
}
function index() {
    echo $this->product_var;
}
function test() {
    if(config('app.product_data')->product_var=="product name") {
         //do something
    }

}
function index() {
    echo config('app.product_data')->product_var;
}
我的型号

function get_data() {
     echo $this->product_var;
}
function get_data() {
     return config('app.product_data')->product_var;
}
正如您在上面看到的我的脚本一样,
$this->product\u var
几乎用于
自定义帮助程序
我的控制器
,以及
我的模型
。 在codeigniter中,我们在libraries文件夹中创建Globals.php,或者将变量放入核心控制器中。 我应该在哪里设置全局变量?

我最近回答了一个问题,作者有一个非常好的全局缓存表值的方法

他的想法是,他正在获取表值(也缓存它),并创建了一个设置
ServiceProvider
,以便以后能够将其作为配置变量访问


也许这对你也会很好

像@Mozammil提到的:

其想法是使用“Laravel配置”。这允许您在一个请求周期内保持全局范围内的值

您可以使用Laravel的
config()
helper通过应用程序访问这些值

您只需将其设置一次,如下所示:

config(['app.product_data' => $data]);
而且,这将在应用程序中全局可用,只需使用
config('app.product_data')
访问数据即可

比如:

在自定义帮助程序中

function test() {
    if($this->product_var=="product name") {

    }
}
function index() {
    echo $this->product_var;
}
function test() {
    if(config('app.product_data')->product_var=="product name") {
         //do something
    }

}
function index() {
    echo config('app.product_data')->product_var;
}
您的控制器

function test() {
    if($this->product_var=="product name") {

    }
}
function index() {
    echo $this->product_var;
}
function test() {
    if(config('app.product_data')->product_var=="product name") {
         //do something
    }

}
function index() {
    echo config('app.product_data')->product_var;
}
您的型号

function get_data() {
     echo $this->product_var;
}
function get_data() {
     return config('app.product_data')->product_var;
}

希望这会有所帮助。

配置不是保存全局变量的好方法。正如框架所建议的,config应该只包含项目的配置。它们应该独立于请求

Laravel提供了更好的方法来处理全局变量,您可以使用单例。为什么? 因为单例在应用程序的最深层次上保持不变,所以它可以在部分请求中被调用和使用。一旦声明它很难在请求的中间改变单体。 您可以将此代码放入AppServiceProvider中,也可以创建自己的ProductVarServiceProvider

App::singleton('product_var', function(){
     return DB::table('categories')->where('id', '2')->first();
}); 
这就是我们确定
产品\u var
来源的方法。稍后,您可以在代码中的任何位置使用助手函数
app('product\u var')

声明全局变量时应小心

同时管理多个数据的另一种最简单的方法。

在会话中设置它。@Tpojka我有很多变量。在会话中添加所有变量是最好的做法吗?很好,因为在应用程序中,单例是在任何地方获得统一值的最佳方法。但我有疑问,它会在一次或每次被调用时触发查询吗?不,一旦singleton得到解决,laravel将保持它的价值。