如何在 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->cat
访问该类别。
第二种方法:
您也可以尝试使用 Config 类。您需要做的就是在app/Providers/AppServiceProvider.php
的boot
方法中添加以下代码
Config::set(['user' => ['name' => 'John Doe']]);
然后,您可以在项目中的任何位置使用 Config::get('user.name');
获取值
【讨论】:
以上是关于如何在 Laravel 中设置全局变量?的主要内容,如果未能解决你的问题,请参考以下文章