对模型的依赖注入不起作用

时间:2019-02-22 11:38:28

标签: laravel

我将在模型中编写依赖项注入。

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use Illuminate\Http\Request;

class Conference_list extends Model
{
    public $timestamps = false;
    public $request;

    public function __construct( Request $request ){
        $this->request = $request;
    }
}

但是,发生以下错误。

Too few arguments to function App\\Models\\Conference_list::__construct()

我不知道我在做什么错。 依赖注入在模型中不可用?

2 个答案:

答案 0 :(得分:2)

雄辩的模型已经有了构造函数。我不建议覆盖它来添加自定义功能。

根据您要尝试执行的操作,可能会有更好的方法。这可能与在模型上设置请求的方法一样简单。可能是这样的:

public function setRequest()
{
    $this->request = request();

    return $this;
}

这将允许您通过将实例传递给请求来手动设置请求,或者Laravel将自动从其Container中解决该请求。

在您的控制器中或任何地方,您都可以执行以下操作:

$model = (new App\Models\Conference_list())->setRequest();

答案 1 :(得分:1)

作为另一种选择,如果您确实需要在模型中使用依赖注入,而无需触摸__construct方法

您可以使用特征为您的模型解决该问题

namespace App\Traits;

use Illuminate\Http\Request;
trait InjectRequest
{
    public static $request;

    protected static function bootInjectRequest()
    {
        self::$request = app(Request::class);
    }

    public function request(): Request
    {
        return self::$request;
    }
}

在您的模型上:

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
use App\Traits\InjectRequest;

class Conference_list extends Model
{
    use InjectRequest;
    public $timestamps = false;

}

致电您的模型:

$request = (new App\Models\Conference_list())->request(); 

找到有关可引导特征的更多信息:https://www.archybold.com/blog/post/booting-eloquent-model-traits