【发布时间】:2017-11-18 08:41:41
【问题描述】:
我正在开发一个 Laravel 5 应用程序并尝试设置 ComposerServiceProvider 以将数据传递给几个视图(我现在尝试将其添加到 layout/app.blade.php)。 我按照文档进行了此操作,但我尝试添加的数据仍未定义..
在我的 config/app.php 我添加到提供者:
App\Providers\ComposerServiceProvider::class,
关于 ComposerServiceProvider.php 开机方法:
View::composer(['layouts.app'], 'App\ViewComposers\LayoutAppComposer');
关于新创建的LayoutAppComposer.php compose(View $view) 方法:
$metaTitle = 'MetaTitle';
$view->with('metaTitle', $metaTitle)
但是当我访问网址时,我仍然得到:
Undefined variable: metaTitle (View: .../resources/views/layouts/app.blade.php)
我在这里错过了什么吗??
服务提供者
namespace App\Providers;
use Illuminate\Support\ServiceProvider;
use Illuminate\Support\Facades\View;
class ComposerServiceProvider extends ServiceProvider
{
/**
* Bootstrap the application services.
*
* @return void
*/
public function boot()
{
View::composer(['layouts.app'], 'App\ViewComposers\LayoutAppComposer');
}
/**
* Register the application services.
*
* @return void
*/
public function register()
{
}
}
LayoutAppComposer
<?php
namespace App\ViewComposers;
use Illuminate\Support\Facades\Session;
use Illuminate\View\View;
class LayoutAppComposer {
protected $metaTitle;
public function __construct($metaTitle)
{
$this->metaTitle = $metaTitle;
}
/**
* Bind data to the view.
*
* @param View $view
* @return void
*/
public function compose(View $view) {
$this->metaTitle = 'MetaTitle';
$view->with('metaTitle', $this->metaTitle);
}
}
【问题讨论】:
-
好的,我想我现在知道了,您要将 metaTitle 绑定到什么?当服务提供者被解析后,他们将使用依赖注入为你的构造函数创建一个 $metaTitle。您可能需要在您的 AppServiceProvider 中绑定它,否则它将为 null。
-
如果我理解正确,我应该将它添加到 AppServiceProvider 对吗? $this->app->bind('App\Providers\ComposerServiceProvider');如果是这样,我仍然收到错误:S
-
不,我实际上认为问题在于 $metaTitle 在传递给 LayoutAppComposer 的构造函数时为空。无论如何,您打算将什么设置为 metaTile 的值?
-
哦,那我应该在 AppServiceProvider 中绑定什么?抱歉没有理解那部分。关于你的问题,实际上我只是在这里设置一个字符串,但我现在这样做是为了学习,因为接下来我需要添加一个更复杂的变量。
-
检查我的答案编辑。
标签: laravel composer-php laravel-5.4