我经常在各种项目中遇到同样的问题 - 我需要从database
设置一些全局变量,并且能够在laravel中的任何地方接收它们 - 视图,控制器,模型。可能吗?或者最简单的方法是什么?
为什么我需要这个?用于语言翻译。我需要它们不缓存并保存在文件中。适用于可从应用程序的任何位置获取的网站选项。要设置网站语言,因为我不想在网址上创建/ language /前缀。
很抱歉,如果这个问题可能重复,但类似问题中的答案都没有以我解释的方式运作。
答案 0 :(得分:3)
您可以尝试view composers全局共享数据到所有视图。
public function compose(View $view)
{
//get value from database
$options = Model::where('domain_name', \Request::server("SERVER_NAME"))->get();
//render to view
$view->with('options', $options);
}
$options
变量(模型)将在每个视图中可用。
与所有控制器共享数据在基本控制器中定义变量,以便在继承基本控制器的控制器中访问它们
class Controller extends BaseController
{
public $options = Model::where('domain_name', \Request::server("SERVER_NAME"))->get();
}
您可以使用
访问它class LoginController extends Controller
{
public function dashboard()
{
//access here using
$x = $this->options;
}
}
像这样,您可以创建基本模型并使用inherit属性在模型中全局访问数据。
希望它对你有用。 options
变量可能包含数据库中的所有选项。
答案 1 :(得分:1)
另一种方法是创建一个辅助类:
1>添加到composer.json的行:
"autoload": {
"files": [
"app/Http/helpers.php"
],
2 - ;创建文件:
app/Http/helpers.php
3>添加代码:
function o($code = null) {
$option = \Option::where('code', $code)->first();
return $option->value;
}
4>在您需要的地方使用:
echo o('option_code')
在调用任何渲染之前,它在Controller和View中有效。这里可以查看会话,配置,cookie等。
答案 2 :(得分:0)
在项目的任何地方访问变量的最佳方法是使用会话。您可以将所有内容存储在会话中,并在控制器,模型和视图中随处访问它。
答案 3 :(得分:0)
使用configuration files存储全球可用数据,从.env
文件中获取数据等。
您可以从应用程序的任何部分使用config('config.key')
全局帮助程序从配置中获取任何数据。
您还可以动态设置config(['config.key' => $value])
全局变量。