public function registerEvents(Events $events) { $events->addCallbackListener($events::HYDRATE_AFTER, function (EventArguments $args) { /** @var BadgeUserBridge $entity */ $entity = $args->entity; $entity->injectTranslator($this->translator); }); }
public function registerEvents(Events $events) { $events->addCallbackListener($events::PERSIST_AFTER, function (EventArguments $args) { /** @var IIndexable|Entity $e */ $e = $args->entity; $data = $e->getIndexData(); if ($data === FALSE) { try { $this->elastic->removeFromIndex($this->getShortEntityName(), (int) $e->id); } catch (Missing404Exception $e) { // entity was yet not in index } } else { $this->elastic->addToIndex($this->getShortEntityName(), (int) $e->id, $data); } }); }
/** * @param IEntity * @param scalar|NULL id * @param string update|insert * @return array */ protected function toArray(IEntity $entity, $id, $operation) { $values = $entity->toArray(); if ($id !== NULL) { $values['id'] = $id; } $params = array('id' => isset($values['id'])) + (array) $this->params; $params += array_fill_keys(array_keys($values), true); if ($this->whichParams !== NULL) { $params = array('id' => $params['id']) + array_fill_keys($this->whichParams, true); } if ($this->whichParamsNot !== NULL) { $tmp = array_fill_keys($this->whichParamsNot, false); unset($tmp['id']); $params = $tmp + $params; } $arguments = array('params' => $params, 'values' => $values, 'operation' => $operation); $this->events->fireEvent(Events::SERIALIZE_BEFORE, $entity, $arguments); $params = $arguments['params']; $values = $arguments['values']; $result = array(); foreach ($params as $key => $do) { if (array_key_exists($key, $values)) { $value = $values[$key]; } else { // pokusi se precist, muze existovat getter, jinak vyhodi exception $value = $entity->{$key}; } if ($do === false or $operation === 'update' and $entity->hasParam($key) and !$entity->isChanged($key)) { continue; } if ($do !== true) { $value = Callback::create($do)->invoke($value, $entity); } $result[$key] = $this->scalarizeValue($value, $key, $entity); if ($value instanceof IRelationship and $result[$key] === NULL) { unset($result[$key]); } } $arguments = array('values' => $result, 'operation' => $operation); $this->events->fireEvent(Events::SERIALIZE_AFTER, $entity, $arguments); $result = $arguments['values']; $result = $this->conventional->formatEntityToStorage($result); $primaryKey = $this->conventional->getPrimaryKey(); if ($primaryKey !== $this->primaryKey and array_key_exists($primaryKey, $result)) { $id = $result[$primaryKey]; unset($result[$primaryKey]); $result = array($this->primaryKey => $id) + $result; } $arguments = array('values' => $result, 'operation' => $operation); $this->events->fireEvent(Events::SERIALIZE_CONVENTIONAL, $entity, $arguments); $result = $arguments['values']; return $result; }
public function registerEvents(Events $events) { $keys = $this->getJsonFields(); $events->addCallbackListener($events::HYDRATE_BEFORE, function (EventArguments $args) use($keys) { foreach ($keys as $key) { if (isset($args->data[$key])) { $args->data[$key] = Json::decode($args->data[$key], Json::FORCE_ARRAY); } } }); $events->addCallbackListener($events::SERIALIZE_BEFORE, function (EventArguments $args) use($keys) { foreach ($keys as $key) { if (isset($args->values[$key])) { $args->values[$key] = Json::encode($args->values[$key]); } } foreach ($args->values as &$value) { if (is_string($value) && $value === '') { $value = NULL; } } }); }
/** * Smaze entitu z uloziste {@see IMapper::remove()} a odpoji ji z repository. * Z entitou lze pak jeste pracovat do ukonceni scriptu, ale uz nema id a neni zapojena na repository. * * Vola udalosti: * @see Events::REMOVE_BEFORE * @see Entity::onBeforeRemove() * @see Events::REMOVE_AFTER * @see Entity::onAfterRemove() * * @param scalar|IEntity * @return bool */ public final function remove($entity) { $entity = $entity instanceof IEntity ? $entity : $this->getById($entity); $this->identityMap->check($entity); if (isset($entity->id) or $entity->getRepository(false)) { $this->events->fireEvent(Events::REMOVE_BEFORE, $entity); if (isset($entity->id)) { if (!$this->getMapper()->remove($entity)) { throw new BadReturnException(array($this->getMapper(), 'remove', 'TRUE', NULL, '; something wrong with mapper')); } $this->identityMap->remove($entity->id); } $this->identityMap->detach($entity); $this->events->fireEvent(Events::REMOVE_AFTER, $entity); } return true; }