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

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

public function __construct()
{
    $cat = Categories::get()->first();
}

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

【问题讨论】:

标签: php laravel


【解决方案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'); 获取值

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-11-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多