【发布时间】:2016-08-15 18:02:07
【问题描述】:
如何使用 CakePHP 3.3 存储所有 save($data) 的所有 $data?
我曾经在 AppModel::beforeSave($data) (Cake 1.2)
更新:
我尝试过使用 EventListenerInterface:
namespace App\Model\Event;
use Cake\Event\EventListenerInterface;
use Cake\ORM\TableRegistry;
class LogModel implements EventListenerInterface
{
public function implementedEvents()
{
return [
'Model.beforeSave' => 'logSave'
];
}
public function logSave($event, $data = null, $options = null)
{
$eventTable = TableRegistry::get('Event');
$eventEntity = $eventTable->newEntity();
$eventEntity->event = json_encode($event);
$eventEntity->data = json_encode($data);
$eventEntity->className = get_class($event->__get('subject'));
//var_dump($eventEntity->className);exit();
$eventTable->save($eventEntity);
}
}
bootstrap.php:
//event global
use Cake\Event\EventManager;
use App\Model\Event\LogModel;
$logModel = new LogModel();
EventManager::instance()->on($logModel);
但这导致了无限递归调用,因为我需要保存(记录)所有保存的数据。有没有办法避免这种情况?
【问题讨论】:
-
在 CakePHP 3 中做类似的事情到底有什么问题?目前您的问题不包含任何实际问题。
-
Cake3 中所有表(或实体)的“beforeSave 等价物”在哪里?