【发布时间】:2016-04-27 14:15:54
【问题描述】:
我正在使用 Laravel 5.3。在扩展请求类的表单请求中,我试图从父类访问方法,但它抛出错误,我似乎不明白为什么。我的表单请求构造函数如下所示。我在这里遗漏了什么吗?
当我把它放在其他方法中时调用才有效,而不是来自理想需要的构造函数。
访问下面的父级会触发“致命错误:在 vendor\laravel\framework\src\Illuminate\Http\Request.php:601 中调用一个成员函数 get() on null”
protected $test= [];
public function __construct(myRepositoryInterface $myRepository) {
$this->myRepository= $myRepository;
if( parent::has('someName') ){
$this->test= $myRepository->someMethod(parent::input('someName'));
}
}
【问题讨论】:
-
在类中创建一个init()方法,并从构造函数中调用。
-
问题出在
parent::has或parent::input,或两者兼有!基于错误,我敢打赌,在父对象的某个地方,通常定义的东西没有被定义,而 laravel 正在尝试使用该值调用某些东西。正如我最初怀疑的那样,它与parent::调用本身并没有太大关系:) -
@Amleonard 是的,我同意,我的想法是,在构造函数完成其工作之前,我无法正确访问这些方法。我可以在另一种方法中调用完全相同的代码并且它可以工作,但是在构造函数中它失败了。谢谢。
-
@jiraiya 我明白了。无论如何,我确信它可以正确访问这两个属性,否则你得到的错误将来自那个特定的脚本,而不是来自 laravel 的内部。对我来说,这意味着在构造函数完成之前,父类中的依赖项不能“就位”。我很难说:)。 Gala 的建议效果如何?
-
@Amleonard 是的,我尝试了 Gala 的解决方案,但结果相同,错误相同。我认为下面的答案可能已经确定了,但值返回为空。必须是您建议的框架。似乎构造函数必须在您访问它之前完成。