如何使用CakePHP 3.3存储所有保存($ data)的所有$数据?
我曾经在 AppModel :: beforeSave($ data)(Cake 1.2)中实现了一个小的日志代码(将$ data转换为json并将其存储在VARCHAR,username和datetime中)< / p>
更新
我尝试过使用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);
但是这导致了无限的递归调用,因为我需要保存(log)所有保存的数据。有没有办法避免这种情况?
答案 0 :(得分:1)
CakePHP 3没有超级模型类的概念。它适合于使其成为行为并在需要时使用它。
请参阅此部分:Creating a Behavior
namespace App\Model\Behavior;
use Cake\Datasource\EntityInterface;
use Cake\Event\Event;
use Cake\ORM\Behavior;
use Cake\ORM\Entity;
use Cake\ORM\Query;
use Cake\Utility\Inflector;
class JsonifyBehavior extends Behavior
{
public function jsonify(Entity $entity)
{
/* Your logic */
}
public function beforeSave(Event $event, EntityInterface $entity)
{
$this->jsonify($entity);
}
}
在各自的表中,使用initialize方法调用行为:
public function initialize(array $config)
{
$this->addBehavior('Jsonify');
}