全局变量在laravel控制器中 [英] Global variable in laravel controller
问题描述
我希望 $ year
变量在我的 PagesController
的所有函数中可用。我试过这段代码,但我没有成功。
I want the $year
variable to be available in all functions of my PagesController
. I tried this code but I didn't succeed.
class PagesController extends Controller
{
public function __construct()
{
$dt = Carbon::parse();
$year = $dt->year;
}
public function index()
{
return view('pages.index');
}
public function about()
{
return view('pages.about', compact('year'));
}
public function create()
{
return view('pages.create', compact('year'));
}
}
推荐答案
<强> 1。选项:使用AppServiceProvider
在这种情况下,$ year可用于所有视图!
In this case $year is available to ALL views!
<?php
namespace App\Providers;
use Carbon;
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
view()->share('year', Carbon::parse()->year);
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
2。选项:使用 View Composer
2. Option: Use a View Composer
在这种情况下,该变量仅适用于您需要的视图。
In this case, the variable is only available to the views where you need it.
不要忘记添加新创建的提供程序至 config / app.php
!
Don't forget to add the newly created provider to config/app.php
!
<?php
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Carbon;
class ComposerServiceProvider extends ServiceProvider
{
/**
* Register bindings in the container.
*
* @return void
*/
public function boot()
{
// Using Closure based composers...
view()->composer('pages.*', function ($view) {
$view->with('year', Carbon::parse()->year);
});
}
/**
* Register the service provider.
*
* @return void
*/
public function register()
{
//
}
}
3。使用刀片 @ inject-method
3. Use Blades @inject-method
在需要一年的视图中,您可以像这样注入一个Carbon实例:
Within the views that need the year you could inject a Carbon instance like this:
@inject('carbon', 'Carbon\Carbon')
{{ $carbon->parse()->year }}
这篇关于全局变量在laravel控制器中的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!