예제 #1
0
파일: UnitOfWork.php 프로젝트: sigma-z/dive
 /**
  * @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);
     }
 }
예제 #2
0
 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));
 }
예제 #3
0
 /**
  * @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);
 }
예제 #4
0
파일: Table.php 프로젝트: sigma-z/dive
 /**
  * @return Event\EventDispatcherInterface
  */
 public function getEventDispatcher()
 {
     return $this->rm->getEventDispatcher();
 }