在 CakePHP 中,可以使用 event
和 Behavior
(内置的行为) 来确定编辑操作中的字段是否已更改。首先,在模型中,你可以创建一个新的行为,通过继承 Behavior
基类来扩展或实现与修改相关的逻辑,然后注册模型并启用行为。
在模型上(例如 Article Model)定义一个 Behavior:
<?php
namespace App\Model\Behavior;
use Cake\Event\EventInterface;
use Cake\ORM\Behavior;
use Cake\ORM\Table;
class ArticleAttributeBehavior extends Behavior
{
public function beforeSave($event, $entity)
{
if ($this->_isFieldDirty('title', $entity)) {
$this->getEvent()->extra["field\_changed"] = 'title';
} else if ($this->_isFieldDirty('body', $entity)) {
$this->getEvent()->extra["field\_changed"] = 'body';
}
parent::beforeSave($event, $entity);
}
private function _isFieldDirty($field, $entity)
{
$oldData = $entity->original($field);
$newData = $entity->{$field};
return $oldData !== $newData;
}
}
然后,在 Model 中使用注册此 Behavior,并启用它:
use Cake\ORM\Table;
use Cake\Datasource\EntityInterface;
class ArticlesTable extends Table
{
领取专属 10元无门槛券
手把手带您无忧上云