我正在尝试检查模型的构造函数,如果允许当前经过身份验证的用户访问给定模型,但我发现构造函数上下文中的$ this为空。在Laravel中为模型分配的属性在哪里?一旦加载了所有属性,我应该如何调用方法?
public function __construct(array $attributes = [])
{
parent::__construct($attributes);
var_dump($this); // empty model
$this->checkAccessible();
}
提前干杯
答案 0 :(得分:0)
您可以使用控制器过滤器来检查用户是否登录,并且您可以调用任何模型功能。
public function __construct(array $attributes = []){
$this->beforeFilter('auth', array('except' => 'login')); //login route
if(Auth::user()){
$user_id = Auth::user()->user_id;
$model = new Model($attributes);
//$model = User::find($user_id);
}
}
从构造函数
将属性绑定到模型Model.php
public function __construct(array $attributes = array())
{
$this->setRawAttributes($attributes, true);
parent::__construct($attributes);
}
答案 1 :(得分:0)
正如其他答案和评论中所述,有更好的方法可以实现问题的目的(至少在现代Laravel中如此)。在这种情况下,我将参考文档的Authorization一章,同时介绍所有门和政策。
但是,要回答一旦加载了模型属性后如何调用方法的特定问题,您可以监听Eloquent retrieved
事件。在类中执行此操作的最简单方法是在类booted()
方法中使用闭包。
protected static function booted()
{
static::retrieved(function ($model) {
$model->yourMethod() //called once all attributes are loaded
});
}
您还可以使用侦听器以正常方式侦听这些事件。请参阅Eloquent events的文档。