如何在Laravel 5.4中从数据库设置全局变量

时间:2017-12-09 13:13:38

标签: laravel laravel-5

我经常在各种项目中遇到同样的问题 - 我需要从database设置一些全局变量,并且能够在laravel中的任何地方接收它们 - 视图,控制器,模型。可能吗?或者最简单的方法是什么?

为什么我需要这个?用于语言翻译。我需要它们不缓存并保存在文件中。适用于可从应用程序的任何位置获取的网站选项。要设置网站语言,因为我不想在网址上创建/ language /前缀。

很抱歉,如果这个问题可能重复,但类似问题中的答案都没有以我解释的方式运作。

4 个答案:

答案 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)

在项目的任何地方访问变量的最佳方法是使用会话。您可以将所有内容存储在会话中,并在控制器,模型和视图中随处访问它。

阅读主题:https://brilliant.org/wiki/trailing-number-of-zeros/

答案 3 :(得分:0)

使用configuration files存储全球可用数据,从.env文件中获取数据等。

您可以从应用程序的任何部分使用config('config.key')全局帮助程序从配置中获取任何数据。

您还可以动态设置config(['config.key' => $value])全局变量。

相关问题