我使用的是Laravel 5.3。在我的扩展请求类的表单请求中,我试图从父类访问方法,但它抛出一个错误,我似乎无法理解为什么。我的表单请求构造函数如下所示。我在这里错过了什么吗?
当我把它放在其他方法中时,调用工作,而不是从理想情况下需要的构造函数中调用。
访问下面的父项触发“致命错误:在供应商\ laravel \ framework \ src \ Illuminate \ Http \ Request.php:601”
中调用null上的成员函数get() protected $test= [];
public function __construct(myRepositoryInterface $myRepository) {
$this->myRepository= $myRepository;
if( parent::has('someName') ){
$this->test= $myRepository->someMethod(parent::input('someName'));
}
}
答案 0 :(得分:2)
有一些问题。
首先,Laravel的Form Request类是Symfony的Request类的子类。如果你看看那个类,它有这个构造函数:
public function __construct(array $query = array(), array $request = array(), array $attributes = array(), array $cookies = array(), array $files = array(), array $server = array(), $content = null)
{
$this->initialize($query, $request, $attributes, $cookies, $files, $server, $content);
}
您创建了自己的构造函数并更改了Request类的行为,从根本上打破了它。您不接受超类所需的任何参数。
Call to a member function get() on null
给了我们一个线索。这是调用get()
的函数:
protected function retrieveItem($source, $key, $default)
{
if (is_null($key)) {
return $this->$source->all();
}
return $this->$source->get($key, $default);
}
您的$source
为空。 $source
可以是headers
属性,因为您的新构造函数为null。该错误与父类'has
方法无关,也与构造函数无关。
其次,您应该拨打parent::has()
。
$this->has()
最后,我会从构造函数中取出它。在其他地方初始化您的存储库。如果由于某种原因确实需要将它放在构造函数中,请尝试接受所有其他参数,然后接受存储库。记得致电parent::__construct(...parameters...
)并运行自己的逻辑。
答案 1 :(得分:0)
你可能忘记在子构造函数中调用parent :: __ construct()了吗?