【发布时间】:2016-03-05 14:51:35
【问题描述】:
关于“服务注入”,文档说:https://laravel.com/docs/5.2/blade#service-injection
服务注入
@inject 指令可用于从 Laravel 服务容器中检索服务。传递给@inject 的第一个参数是服务将被放入的变量的名称,而第二个参数是您希望解析的服务的类/接口名称:
@inject('metrics', 'App\Services\MetricsService')
<div>
Monthly Revenue: {{ $metrics->monthlyRevenue() }}.
</div>
我的代码:
1、服务:
NameAndRole.php
class NameAndRole
{
public function nameAndRole() {
$user = \Auth::user();
$username= $user->name;
$role =$user->getRoles();
$slug=$role[0]['slug'];
return compact('username','slug');
}
}
2、观点:
sidebar.blade.php
@inject('nameAndRole','App\Services\NameAndRole')
<div>
<h4 >username:{{$username}}</h4>
<h4>slug:{{$slug}}</h4>
</div>
错误:
Undefined variable: username (View: D:\wnmp\www\laravel-book\resources\views\partials\sidebar.blade.php) (View: D:\wnmp\www\laravel-book\resources\views\partials\sidebar.blade.php)
【问题讨论】:
-
未定义变量是什么?错误中没有为未定义的变量指定名称?
-
如文档中所述 "传递给@inject 的第一个参数是服务将被放入的变量的名称,而第二个参数是服务的类/接口名称您希望解决”。因此,您现在使用的
@inject语法将创建App\Services\NameAndRole类的实例并将其分配给名为nameAndRole的变量。如果您要调用{{ $nameAndRole->nameAndRole() }},它将返回一个包含用户名和slug 的数组,因为您从nameAndRole方法返回它。任何地方都没有定义username和slug变量。 -
您可能对如何在视图中使用服务注入有误解,或者您可能需要一种新方法,所以请说明您要实现的目标。
标签: php laravel laravel-5.2