示例#1
0
 /**
  * @TODO utilisation d'une interface ? RoutableInterface ou un truc comme ça
  * @TODO utilisation de PropertyPath
  * @TODO Gestion de la datetime et slugify (voir invenio) (setUrlizeStrategy ?)
  * Renvoi les paramètres de la route en fonction de l'objet $objet. (Utilisation de toArray ?)
  * Si le paramètre n'existe pas sur l'objet il est ignoré
  *
  * @param array  $keys
  * @param object $object
  *
  * @return array
  */
 protected function getParametersFromObject(array $keys, $object)
 {
     $parameters = [];
     foreach ($keys as $key) {
         $set = false;
         if (strpos($key, '_') !== false) {
             $value = $object;
             foreach (explode('_', $key) as $segment) {
                 $method = 'get' . Parser::camelize($segment);
                 if (method_exists($value, $method)) {
                     $value = $value->{$method}();
                     $set = true;
                 } else {
                     $set = false;
                     break;
                 }
             }
         } else {
             $method = 'get' . Parser::camelize($key);
             if (method_exists($object, $method)) {
                 $value = $object->{$method}();
                 $set = true;
             }
         }
         if ($set) {
             $parameters[$key] = $value;
         }
     }
     return $parameters;
 }
示例#2
0
 /**
  * {@inheritdoc}
  */
 public function validate($value, Constraint $constraint)
 {
     if ($value->getStatus() === $constraint->status) {
         foreach ($constraint->required_fields as $field) {
             $getter = 'get' . Parser::camelize($field);
             if (!$value->{$getter}()) {
                 $this->context->buildViolation($this->getConstraintMessage($value, $field, $constraint))->atPath($field)->addViolation();
             }
         }
     }
 }
示例#3
0
 /**
  * @param object $object
  * @param string $field
  *
  * @return mixed
  */
 public function field($object, $field)
 {
     //@TODO refactoring with routing system
     $buffer = strpos($field, '_') === false ? [$field] : explode('_', $field);
     $value = $object;
     foreach ($buffer as $segment) {
         $getter = 'get' . Parser::camelize($segment);
         $value = $value->{$getter}();
     }
     return $value;
 }
示例#4
0
 public function prePersist(LifecycleEventArgs $eventArgs)
 {
     $entity = $eventArgs->getObject();
     if ($entity instanceof SortableInterface) {
         $em = $eventArgs->getEntityManager();
         $repo = $em->getRepository($em->getClassMetadata(get_class($entity))->getName());
         $config = $repo->getSortableConfiguration();
         $setter = 'set' . Parser::camelize($config['position']);
         $getter = 'get' . Parser::camelize($config['position']);
         if ($entity->{$getter}() === null) {
             $entity->{$setter}($repo->getNewOrder($entity, 'sort'));
         }
     }
 }
示例#5
0
 /**
  * {@inheritdoc}
  */
 public function getModelName($format = 'underscore')
 {
     $reflection = new \ReflectionClass(get_class($this));
     $classname = $reflection->getShortName();
     switch ($format) {
         case 'lower':
             return strtolower($classname);
             break;
         case 'underscore':
             return Parser::underscore($classname);
             break;
         case 'camelize':
             return Parser::camelize($classname);
             break;
     }
 }
 /**
  * @param object $entity
  * @param string $alias
  *
  * @return object|null
  */
 public function getPreviousEntity($entity, $alias)
 {
     $qb = $this->getOrderableQuery($entity, $alias);
     $qb->select($alias);
     $qb->andWhere($alias . '.' . $this->config['position'] . ' < :position');
     $getter = 'get' . Parser::camelize($this->config['position']);
     $qb->setParameter('position', $entity->{$getter}());
     $qb->orderBy($alias . '.order', 'DESC');
     $qb->setMaxResults(1);
     return $qb->getQuery()->getOneOrNullResult();
 }