我将在模型中编写依赖项注入。
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()
我不知道我在做什么错。 依赖注入在模型中不可用?
答案 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