繁体   English   中英

如何将不同的口才模型注入特征方法?

[英]How can I inject different Eloquent Models into the method of a trait?

我希望在Laravel 5应用程序中跨控制器保持干燥。 我选择的路线是将Trait与可以应用于我的单独控制器的方法一起使用。

我的Trait中的方法需要作用于不同的Model类。 它们始终是Eloquent模型的子类

这是我的尝试:

<?php namespace Conjunto\Traits;

use Illuminate\Database\Eloquent\Model;

trait SortableTrait
{
    /**
     *
     */
    public function upPosition(Model $model)
    {
        dd($model);
    }
}

不幸的是,由于Eloquent模型本身无法实例化,因此出现以下错误:

目标[Illuminate \\ Database \\ Eloquent \\ Model]无法实例化。

我如何仍可以使用Trait进行这项工作?

解决方案是将具体模型注入构造函数中,将其设置为属性,然后在Trait的upPosition方法中使用此属性。

controller UserController 
{
  protected $model;

  use SortableTrait;

  public function __construct(User $user) 
  {
    $this->model = $user;
  }
}

现在,在您的特征中,您应该将方法更改为:

public function upPosition()
{
   dd($this->model);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM