/** * @param string $eventName * @param Record $record */ private function invokeRecordEvent($eventName, Record $record) { $length = 12; // length of Dive.Record. $hookMethod = substr($eventName, $length); if (method_exists($record, $hookMethod)) { call_user_func(array($record, $hookMethod)); } $eventDispatcher = $this->recordManager->getEventDispatcher(); if ($eventDispatcher->hasListeners($eventName)) { $recordEvent = new Record\RecordEvent($record); $eventDispatcher->dispatch($eventName, $recordEvent); } }
public function testGetTableWithBehavior() { $tableName = 'article'; // initializes article table and instances TimestampableBehavior as shared instance $this->rm->getTable($tableName); $tableBehaviors = self::readAttribute($this->rm, 'tableBehaviors'); $this->assertCount(1, $tableBehaviors); /** @var TimestampableBehavior $timestampableBehavior */ $timestampableBehavior = current($tableBehaviors); $this->assertInstanceOf('\\Dive\\Table\\Behavior\\TimestampableBehavior', $timestampableBehavior); $eventDispatcher = $this->rm->getEventDispatcher(); $this->assertCount(1, $eventDispatcher->getListeners(Record::EVENT_PRE_SAVE)); $this->assertCount(1, $eventDispatcher->getListeners(Record::EVENT_PRE_UPDATE)); $this->assertCount(1, $eventDispatcher->getListeners(Record::EVENT_PRE_INSERT)); }
/** * @param RecordManager $rm */ private function addPreFieldValueChangeEventListener(RecordManager $rm) { $fieldValueChangeListener = function (FieldValueChangeEvent $event) { /** @var Record $record */ $record = $event->getRecord(); $record->markFieldAsModified($event->getProperty()); }; // clean event dispatcher with no listeners $rm->getConnection()->setEventDispatcher(new EventDispatcher()); $eventDispatcher = $rm->getEventDispatcher(); $eventDispatcher->addListener(Record::EVENT_PRE_FIELD_VALUE_CHANGE, $fieldValueChangeListener); }
/** * @return Event\EventDispatcherInterface */ public function getEventDispatcher() { return $this->rm->getEventDispatcher(); }