Laravel 5 – 全局刀片视图variables在所有模板中可用
我想知道如何在Laravel 5中使全局variables在所有的Blade模板中可用?
选项1:
你可以像这样使用view::share()
:
<?php namespace App\Http\Controllers; use View; //You can create a BaseController: class BaseController extends Controller { public $variable1 = "I am Data"; public function __construct() { $variable2 = "I am Data 2"; View::share ( 'variable1', $this->variable1 ); View::share ( 'variable2', $variable2 ); View::share ( 'variable3', 'I am Data 3' ); View::share ( 'variable4', ['name'=>'Franky','address'=>'Mars'] ); } } class HomeController extends BaseController { //if you have a constructor in other controllers you need call constructor of parent controller (ie BaseController) like so: public function __construct(){ parent::__construct(); } public function Index(){ //All variable will be available in views return view('home'); } }
选项2:使用composer php:
- 在
app\Composers\HomeComposer.php
创build一个composer php文件
注意:创buildapp\Composers
如果它不存在
<?php namespace App\Composers; class HomeComposer { public function compose($view) { //Add your variables $view->with('variable1', 'I am Data') ->with('variable2', 'I am Data 2'); } }
然后,您可以通过这样做将composer php附加到任何视图
<?php namespace App\Http\Controllers; use View; class HomeController extends Controller{ public function __construct(){ View::composers([ 'App\Composers\HomeComposer' => ['home'] //attaches HomeComposer to home.blade.php ]); } public function Index(){ return view('home'); } }
按照这里的build议创build一个新的服务提供者
将您的新服务提供程序添加到configuration文件(config / app.php)。
在新的服务提供商的启动方法中使用:
View::share( 'something_cool', 'this is a cool shared variable' );
现在您可以在所有视图中使用$ something_cool了。
希望这可以帮助。
寻找相同问题的解决scheme,并findLaravel文档中的最佳解决scheme。 只需在这个AppServiceProvider
使用View::share
:
View::share('key', 'value');
详情在这里 。
你可以用视图composer php来做这个。 视图作曲者在模板被加载时执行。 你可以通过一个Closure来为这个视图添加额外的function。 查看composer php,你可以使用通配符。 为每个视图制作视图作曲者只需使用*
。
View::composer('*', function($view) { $view->with('variable','Test value'); });
您也可以在没有closures的情况下执行此操作,正如您在文档中看到的一样。
View::composer('*', 'App\Http\ViewComposers\ProfileComposer');
个人资料编辑器类必须具有撰写方法。
视图作曲者在视图被渲染时被执行。 Laravel也认为创造者。 这些都是在实例化视图时执行的。
您也可以select使用带有setupLayout方法的BaseController。 然后,您将加载的每个视图都通过setupLayout方法加载,该方法添加了一些额外的数据。 但是,通过使用视图composer php,你很确定代码被执行。 但是使用BaseController方法,您可以更灵活,因为您可以跳过加载额外的数据。
编辑:正如Nic Gutierrez所提到的,你也可以使用视图共享。
另外,您可以在Route.php
文件中执行此操作:
view()->share('variableName', $variable);
你可以将它闪存到会话中,你可以在.env文件中定义它(静态variables)