从laravel中的数据库定义全局变量的最佳方法

从laravel中的数据库定义全局变量的最佳方法,laravel,Laravel,我想从数据库中定义一些变量,将它们放在应用程序的任何位置(至少是控制器和视图) 我在Http/Controllers/Controller.php中找到了这样做的方法: namespace App\Http\Controllers; use Session; use Request; use View; use App\Http\Requests; use Log; use Illuminate\Foundation\Bus\DispatchesJobs; use Illuminate\Ro

我想从数据库中定义一些变量,将它们放在应用程序的任何位置(至少是控制器和视图)

我在Http/Controllers/Controller.php中找到了这样做的方法:

namespace App\Http\Controllers;

use Session;
use Request;
use View;
use App\Http\Requests;
use Log;

use Illuminate\Foundation\Bus\DispatchesJobs;
use Illuminate\Routing\Controller as BaseController;
use Illuminate\Foundation\Validation\ValidatesRequests;
use Illuminate\Foundation\Auth\Access\AuthorizesRequests;

class Controller extends BaseController
{
    use AuthorizesRequests, DispatchesJobs, ValidatesRequests;

    public function __construct() 
    {

        $this->middleware(function ($request, $next) {
            $t = array();
            $translations = \App\Translation::all();
            foreach ($translations as $translation) {
                    $t[$translation->code] = $translation->text;
            }
            View::share('t', $t);
        });
    }
}
它工作正常-我可以在我的应用程序中访问{$t['something'}},但是身份验证路径
/register
/login
存在问题,在这些页面中,
$t
变量未定义

我想,因为Auth在这个myu构造之前执行了一些操作,如何修复它

或者,也许有更好的方法从所有应用程序视图和控制器中可访问的数据库中设置动态变量


(laravel 5.3)我是laravel的新手,所以还不能感受到体系结构。

我会设置如下自定义配置:

 Config::set('translations', your_array_from_database);
//function to fetch data
//$t = \App\Translation::all();
return View::make('gameworlds.mygame', compact(['t']));
您甚至可以定义自己的助手函数来快速检索,即

function t($name)
{
     return Config::get('translations.'.$name);

您可以在中间件中设置自己的翻译配置,以便确定从数据库加载它的请求-响应周期中的确切顺序。

尝试使用Laravel中的
compact
函数。类似如下:

 Config::set('translations', your_array_from_database);
//function to fetch data
//$t = \App\Translation::all();
return View::make('gameworlds.mygame', compact(['t']));
然后在视图上,您可以访问它,如:

{{$t}}

我已经有一段时间没有使用Laravel了,但我的猜测是,根据5.3文档,您可以只使用缺少它的身份验证控制器。在中,您可以添加中间件,例如:

app/Http/Controllers/Auth/RegisterController.php

public function __construct()
{
    $this->middleware('guest');

    $this->middleware(function ($request, $next) {
        // Add your middleware logic here 
        // or put it in it's own file and reference like 'guest' above.

        return $next($request);
    });
}
首先在上面的闭包中直接尝试您的逻辑。然后转移到它自己的类文件并进行修改


或者,您可以将中间件包括在扩展自的基本控制器中:

为什么不创建文件
cfg
?抱歉,laravel新手,不知道如何执行此操作。我可以在那里调用db吗?将中间件移到一个文件中,并从Auth控制器引用它如何(调用缺少变量的Auth视图)?您可以首先尝试在关闭时直接添加中间件逻辑,然后在看到它工作后移动到一个文件。请参见下面的我的答案。我的答案有意义吗?如果我将代码放在这里,这意味着它仅与此控制器中的操作一起工作?并且全局需要这些变量…我以为您能够将它们全局添加到所有视图中除了身份验证之外?这是您将如何涵盖身份验证的内容。您也可以在基本控制器中包括中间件。您的所有控制器都可以扩展基本控制器。我将更新我的答案以提及这一点。更新的answer.hmm无法在视图中访问Config::get('translations')-使用此代码后,它是空的:(但我可以在任何其他操作中接收非来自Auth的变量。因此,这意味着Auth在我设置配置之前以某种方式呈现他的操作::…?在中间件中设置配置,正如我在回答中所写的,您可以决定在请求周期中何时调用中间件如何更改在请求周期中调用的顺序?您可以在文档中找到如何编写自定义中间件并在请求周期中调用它:使用View::make而不是View::share仍然没有定义变量