【问题标题】:How to know which all events are being triggered during a Yii application lifecycle?如何知道在 Yii 应用程序生命周期中触发了哪些事件?
【发布时间】:2016-01-14 07:28:12
【问题描述】:

我需要知道这一点,因为我无法通过调用函数 setStatus() 来保存我的用户模型,而我正试图从扩展自 yii\base\component 的类中调用该函数。

public  function setStatus()
    {
     if (!\Yii::$app->user->isGuest) {
        $this->status = 1;
        $this->save();
     }
     else {
         $this->status = 0;
         $this->save();
     }

    }

这里是组件类

Class StatusComponent extends Component
 {
     public function init(){
        $user = New User;
        $user_id = Yii::$app->user->identity->username;
        $user->setStatus();
        echo $user->getStatus();
        parent::init();
     } 
 }

Here 是 Yii 论坛上建议的解决方法,它说这可能是由于某些事件返回 'false'.. 如果是这种情况,我怎么知道?

【问题讨论】:

  • 显示用户模型的验证规则。
  • 猜得好!实际上我只是通过使用 $model->getErrors() 方法弄清楚了,它说“状态无效”。在规则中为状态字段定义了一个“范围”。如果您发布答案,请等待接受。如果您认为这个问题会对社区有所帮助,请不要忘记 upVote()。 :) 干杯!

标签: php yii


【解决方案1】:

由于您在这里使用save() 方法,因此将在状态保存时执行验证检查:

    $this->status = 1;
    $this->save();

要获得保存错误,您可以执行以下操作:

    $this->status = 1;
    if ($this->validate())
        $this->save(false);
    else {
        echo "There was some errors while saving user!";
        die(print_r($this->getErrors()));// this line for debug
    }

save(false) 在保存前禁用验证。

为了解决关于列出所有事件的原始问题,可以使用x-debug 或类似的堆栈跟踪工具。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多