【问题标题】:How to log $data of all save($data) in CakePHP 3?如何在 CakePHP 3 中记录所有保存的 $data($data)?
【发布时间】: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 等价物”在哪里?

标签: php json cakephp logging


【解决方案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);  
  }
}

并在您各自的表中,调用初始化方法中的行为:

public function initialize(array $config)
{
    $this->addBehavior('Jsonify');
}

【讨论】:

  • 感谢您的回答!但是,是否有一种隐式的方法可以在所有 Table 上添加 addBehavior('Jsonify') 而不是在它们的每个初始化中写入?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-29
  • 2018-12-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多