gpt4 book ai didi

php - 如何在 beforeSave、beforeValidate、afterSave 等中正确调用 parent::

转载 作者:可可西里 更新时间:2023-11-01 00:05:57 26 4
gpt4 key购买 nike

在 Yii 文档中,我们经常可以读到“确保调用父实现,以便正确引发事件。”对于 beforeSave、beforeValidate、afterSave ...

在我看到的 Yii 博客教程中:

protected function beforeSave()
{
if(parent::beforeSave())
{
...
return true;
}
else
return false;
}

if 函数怎么了?

我也简单地看到了:

protected function afterSave()
{
parent::afterSave();
...
}

和:

protected function beforeValidate()
{
...
return parent::beforeValidate();
}

为什么有时将 parent::function 调用包装在 if 函数中?
如果我只调用 parent::function(); 有什么关系吗?在开始还是最后返回?

最佳答案

这取决于你想做什么。

您应该知道 beforeSave 和 beforeValidate 方法可以通过返回 true 或 false 影响保存/验证的进一步过程,而 afterSave 和 afterValidate 则不能。您还应该知道,您不仅可以拥有一个事件处理程序,还可以拥有任意数量的事件处理程序,并使用 attachEventHandler 附加。方法。因此,考虑到这一点,当您有多个事件处理程序时,调用父函数的位置对于 beforeSave 和 beforeValidate 方法来说很重要。在其他情况下,它不会。

例如,您的模型中有 beforeSave() 处理程序,并且您还在另一个类中订阅了此事件(这都是基于 Observer pattern ,我建议您阅读它以更深入地了解事件) .当您实现 beforeSave() 方法时,您必须调用 parent::beforeSave() 以使其他事件处理程序工作。如果您决定出于某种原因不应该保存您的模型,您可以选择是否运行其他事件处理程序。因此,您可以立即返回 false,而无需触发其他事件处理程序(并可能节省一些资源)。

如果您认为自己的 beforeSave() 处理程序不如其他附加处理程序重要,那么您应该先调用 parent::beforeSave() ,检查它的结果(就像您在第一个示例中所做的那样)并根据什么执行代码其他事件处理程序决定这样做。

通常你的模型中不会有额外的事件处理程序(如果你有,你可能应该自己理解你的问题),所以你总是可以在 return 语句中调用父方法,就像你最后的例子一样。如果您想中断保存或验证,则返回 false。

关于php - 如何在 beforeSave、beforeValidate、afterSave 等中正确调用 parent::,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14183399/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com