在cakephp 3中,我们可以在任何Model中定义beforDelete事件监听器。但是如何将此事件用于所有模型。我想在删除所有存在模型中的一条记录之前检测所有级联记录条件。
namespace App\Model\Table;
use Cake\ORM\Table;
class ArticlesTable extends Table{
public function initialize(array $config)
{
$this->primaryKey('my_id');
}
public function beforeDelete(Event $event, EntityInterface $entity,ArrayObject $options)
{
return false;
}
}
如何将此代码用于所有模型。应该是appcontroller中的这段代码吗?
答案 0 :(得分:3)
使用the event system非常简单。阅读整个章节,先了解事件。
答案 1 :(得分:1)
我通常创建行为类并在那里添加将由大多数Table对象共享的功能。我不知道这是更好的方法,但这是我遵循的步骤。
首先使用bake命令bin/cake bake behavior
创建行为类,这将创建正确的命名空间类,并在那里添加beforeDelete
方法。
在顶部添加use ArrayObject; use Cake\Event\Event; use Cake\ORM\Entity;
如果bake命令尚未添加。
public function beforeDelete(Event $event, Entity $entity, ArrayObject $options){
//your code goes here
// $this->_table is Table object instance behavior is attached to
}
现在将行为附加到您的表类
class ArticlesTable extends Table{
public function initialize(array $config)
{
$this->addBehavior('YourBehaviorNeme');
}
}
答案 2 :(得分:0)
另一种适用于所有模型的解决方案是:
class MyTable extends Table
beforeDelete
方法MyTable