如何在 Laravel 中设置全局变量?

Posted

技术标签:

【中文标题】如何在 Laravel 中设置全局变量?【英文标题】:How to set Global variable in Laravel? 【发布时间】:2019-06-13 22:04:30 【问题描述】:

我正在尝试在 Laravel 中设置一个全局变量,我在 __construct() 函数中设置但不能在控制器之外使用它。 我应该在哪里设置该变量?

public function __construct()

    $cat = Categories::get()->first();

但我无法访问某些页面中的$cat 变量。

【问题讨论】:

您希望能够跨视图访问$cat吗? 你可以查看这个答案:global variable for all controller and views 你可能想要查看 Laravel 的 View Composers 以在所有视图之间共享数据。 (laravel.com/docs/master/views#view-composers) 【参考方案1】:

使用服务提供商

https://hdtuto.com/article/laravel-5-global-variable-in-all-views-file

app/Providers/AppServiceProvider.php

<?php

namespace App\Providers;

use Illuminate\Support\ServiceProvider;

class AppServiceProvider extends ServiceProvider



    /**

     * Bootstrap any application services.

     *

     * @return void

     */

    public function boot()

    

        view()->share('siteTitle', 'HDTuto.com');



    

    /**

     * Register any application services.

     *

     * @return void

     */

    public function register()

    

        //

    


在你看来

 $siteTitle 

【讨论】:

【参考方案2】:

您也可以使用解决方案,如下所示:

App::before(function($request) 
    App::singleton('cat', function()
        return Categories::get()->first();
    );
);

现在使用下面的行在控制器中获取数据;

$cat = app('cat');

您可以使用以下行在视图中传递数据:

view('home', compact('cat'));

【讨论】:

【参考方案3】:

如果您想在任何地方访问 $cat 变量,即在所有控制器和视图中,您应该如下共享它:

protected $cat;

public function __construct()

    $this->cat = Categories::get()->first();
    View::share('site_settings', $this->cat);

我假设您使用的是BaseController 构造函数。现在,如果您的控制器扩展了这个BaseController,他们可以使用$this-&gt;cat 访问该类别。

第二种方法:

您也可以尝试使用 Config 类。您需要做的就是在app/Providers/AppServiceProvider.phpboot 方法中添加以下代码

Config::set(['user' => ['name' => 'John Doe']]);

然后,您可以在项目中的任何位置使用 Config::get('user.name'); 获取值

【讨论】:

以上是关于如何在 Laravel 中设置全局变量?的主要内容,如果未能解决你的问题,请参考以下文章

如何在 VBA 中设置全局变量

37如何在函数中设置一个全局变量 ?

如何在 asp.net c# 渲染覆盖中设置全局变量?

如何在另一个模块中设置全局变量?

在 Xcode 构建阶段运行脚本中设置全局环境变量

在R中的引用类中设置全局变量