Php &引用;服务注入“;拉维5.2

Php &引用;服务注入“;拉维5.2,php,laravel,laravel-5.2,Php,Laravel,Laravel 5.2,关于“服务注入”,文档中说: 服务注入 @inject指令可用于从Laravel服务容器检索服务。传递给@inject的第一个参数是将服务放入的变量的名称,而第二个参数是要解析的服务的类/接口名称: 2、 视图: sidebar.blade.php @inject('nameAndRole','App\Services\NameAndRole') <div> <h4 >username:{{$username}}</h4> <h4>slug

关于“服务注入”,文档中说:

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

2、 视图:
sidebar.blade.php

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

您应该从方法中获取变量

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

我在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的第一个参数是服务将放入的变量的名称,而第二个参数是您希望解析的服务的类/接口名称”。因此,您现在使用的
@inject
语法将创建
App\Services\NameAndRole
类的实例,并将其分配给名为
NameAndRole
的变量。如果要调用
{{$nameAndRole->nameAndRole()}
,当您从
nameAndRole
方法返回数组时,它将返回一个包含用户名和slug的数组。任何地方都没有定义
username
slug
变量。您可能误解了如何在视图中使用服务注入,或者您可能需要一种新的方法,因此请解释您试图实现的目标。虽然此代码将达到用户第一次期望的效果,这是一个糟糕的实现,因为它不必要地进行两次方法调用,并两次查询数据库以获取相同的信息。我刚刚演示了如何使用此方法实现inject。我明白了,但在本例中是可行的≠ 好建议。我在laracasts.com上得到了答案,我想这就是我想要的。但是,它会查询数据库两次吗@波格达尼,我想这是真的。这个解决方案很好,因为它在创建实例时只在构造函数中查询数据库一次,并且将它们存储在类属性中,因此不需要再次查询数据库@然而,Yurich的解决方案是两次调用
nameAndRole()
方法,因此它再次执行相同的代码,包括
getRoles()
方法,我假设该方法是查询数据库以获取角色,因此它应该查询数据库两次。
@inject('nameAndRole','App\Services\NameAndRole')
<div>
   <h4 >username:{{$nameAndRole->nameAndRole()['username']}}</h4>
   <h4>slug:{{$nameAndRole->nameAndRole()['slug']}}}</h4>
</div>
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 }}