Laravel调用方法一旦模型加载

时间:2015-05-08 06:20:30

标签: php laravel eloquent

我正在尝试检查模型的构造函数,如果允许当前经过身份验证的用户访问给定模型,但我发现构造函数上下文中的$ this为空。在Laravel中为模型分配的属性在哪里?一旦加载了所有属性,我应该如何调用方法?

public function __construct(array $attributes = [])
{
    parent::__construct($attributes);
    var_dump($this); // empty model
    $this->checkAccessible();

}

提前干杯

2 个答案:

答案 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的文档。