Wil*_*lim 21 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**
Run Code Online (Sandbox Code Playgroud)
自定义助手
function test() {
if($this->product_var=="product name") {
}
}
Run Code Online (Sandbox Code Playgroud)
我的控制器
function index() {
echo $this->product_var;
}
Run Code Online (Sandbox Code Playgroud)
我的模特
function get_data() {
echo $this->product_var;
}
Run Code Online (Sandbox Code Playgroud)
正如你可以在上面看到我的剧本,$this->product_var几乎用custom helper,my controller和my model.在codeigniter中,我们在libraries文件夹中创建Globals.php,或者只是将变量放在核心控制器中.我应该在哪里设置全局变量?
anw*_*erj 10
Config不是保存全局变量的好方法.正如框架所示,配置应该只包含项目的配置.他们应该独立于要求.
Laravel提供了更好的处理全局变量的方法,你可以使用Singletons.为什么?因为单例保持应用程序最深层次,所以可以在请求的一部分中调用它.一旦声明在请求中间很难更改单例.
您可以将此代码放在AppServiceProvider中,也可以创建自己的ProductVarServiceProvider.
App::singleton('product_var', function(){
return DB::table('categories')->where('id', '2')->first();
});
Run Code Online (Sandbox Code Playgroud)
这是你可以确定的起源的方式product_var.稍后您可以app('product_var')在代码中的任何位置使用辅助函数.
在声明全局变量时应该小心.
像@Mozammil一样提到:
我们的想法是使用"Laravel配置".这允许您将值保留在一个请求周期的全局范围内.
您可以使用config()Laravel 的帮助程序通过应用程序访问这些值.
你只需要设置一次,如:
config(['app.product_data' => $data]);
Run Code Online (Sandbox Code Playgroud)
并且,这将仅在config('app.product_data')用于访问数据的应用程序中全局可用.
喜欢:
在自定义助手中
function test() {
if(config('app.product_data')->product_var=="product name") {
//do something
}
}
Run Code Online (Sandbox Code Playgroud)
你的控制器
function index() {
echo config('app.product_data')->product_var;
}
Run Code Online (Sandbox Code Playgroud)
你的模特
function get_data() {
return config('app.product_data')->product_var;
}
Run Code Online (Sandbox Code Playgroud)
希望这会有所帮助.
| 归档时间: |
|
| 查看次数: |
3032 次 |
| 最近记录: |