我试图签入一个模型的构造函数,如果当前已验证的用户被允许访问给定的模型,但是我发现来自构造函数上下文的$this是空的。在Laravel中,分配给模型的属性在哪里?当所有属性都被加载后,我应该如何调用一个方法?
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
var_dump($this); // empty model
$this->checkAccessible();
}
提前干杯
3条答案
按热度按时间t98cgbkg1#
正如在其他回答和评论中所述,有更好的方法来实现这个问题的目标(至少在现代Laravel中)。在这种情况下,我将参考文档的Authorization章节,该章节同时涉及门和策略。
然而,要回答如何在加载模型属性后调用方法的特定问题-您可以侦听Eloquent
retrieved
事件。在类中完成此操作的最简单方法是在类booted()
方法中使用闭包。您也可以使用监听器以常规方式监听这些事件。请参阅Eloquent事件的文档。
jbose2ul2#
您可以使用控制器过滤器来检查用户是否登录,然后调用任何模型函数。
从构造函数将属性绑定到模型
Model.php
uinbv5nw3#
正如Rory所提到的,
retrieved
事件负责此操作。此外,它可以通过事件/侦听器方法以更干净和OOP的方式形成,特别是如果您需要编写大量代码或只有很少的处理程序。如这里所述,您可以只为Model创建一个事件,如下所示
您需要创建这个类,雄辩事件默认接受模型:
下面介绍如何为该事件声明监听器,应该在
EventListenerProvider
中的某个位置,如下所示:侦听器应该只实现方法
handle()
(检查文章),如下所示:另一种可能性是注册模型Observer,如这里所述