Laravel 5.2的“服务注入”


"Service Injection" of Laravel 5.2

关于"服务注入",文档说:https://laravel.com/docs/5.2/blade#service-injection

服务注入

@inject指令可用于从Laravel服务容器中检索服务。传递给@inject的第一个参数是服务将放入的变量的名称,而第二个参数是要解析的服务的类/接口名称:

@inject('metrics', 'App'Services'MetricsService')
<div>
    Monthly Revenue: {{ $metrics->monthlyRevenue() }}.
</div>  

我的代码:

1、服务:
名称和角色.php

class NameAndRole
{
    public function nameAndRole() {
        $user = 'Auth::user();
        $username= $user->name;
        $role =$user->getRoles();
        $slug=$role[0]['slug'];
        return compact('username','slug');
    }
}

2、查看:
侧边栏.刀片.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)

我在 laracasts.com 上得到了答案,我认为这就是我想要的:

class NameAndRole
{
    public $username;
    public $slug;
    public function __construct()
    {
        $user = 'Auth::user();
        $this->username = $user->name;
        $role = $user->getRoles();
        $this->slug = $role[0]['slug'];
    }
}

在"刀片"视图中:

@inject('details', 'App'Services'NameAndRole')
{{ $details->username }}
{{ $details->slug }}

你应该从方法中获取变量

@inject('nameAndRole','App'Services'NameAndRole')
<div>
   <h4 >username:{{$nameAndRole->nameAndRole()['username']}}</h4>
   <h4>slug:{{$nameAndRole->nameAndRole()['slug']}}}</h4>
</div>