Beispiel #1
0
 /**
  *  Pobla los atributos de la clase o objeto especificado con los parametros provenientes en el request actual
  * @param string|Object $name
  * @param \Raptor\Util\ItemList $request
  * @param array $matcher
  * @return mixed
  * @throws \Exception
  */
 public static function run($name, \Raptor\Util\ItemList $request, $matcher = array())
 {
     $class = $name;
     $reflectionClass = new ReflectionClass($class);
     $props = $reflectionClass->getProperties(ReflectionProperty::IS_PRIVATE | ReflectionProperty::IS_PUBLIC | ReflectionProperty::IS_PROTECTED);
     foreach ($props as $prop) {
         if ($request->keyExist($prop->getName())) {
             $prop->setAccessible(true);
             $prop->setValue($class, Collector::validator($request->get($prop->getName())));
         }
     }
     foreach ($matcher as $key => $match) {
         if ($reflectionClass->hasProperty($key) and $request->keyExist($match)) {
             $reflectionClass->getProperty($key)->setAccessible(true);
             $reflectionClass->getProperty($key)->setValue($class, $request->get($match));
         } else {
             throw new \Exception("Reflection Error: the {$key} match does not exist in the class ");
         }
     }
     return $class;
 }
Beispiel #2
0
 /**
  * Pobla los atributos de la clase o objeto especificado con los parametros provenientes en el request actual
  * 
  * Si el primer parametro es una clase el colector crea un instancia de esta.
  * Si el primer paremtro es un objeto lo usa para poblar segun los parametros del request.
  * 
  * @param string/object $class clase u objeto a poblar
  * @param array $matcher un array con el macheo de parametros que no conciden con los atributos de la clase. ejemplo array('nombre'=>'nombre_c') en el ejemplo nombre es el parametro que viene en el request y nombre_c el que esta en la clase, el colector pone el valor de nombre en nombre_c
  * @return mixed
  */
 public function collector($class, $matcher = array())
 {
     $classTo = $class;
     if (!is_object($classTo)) {
         $alias = new ItemList(explode(':', $classTo));
         if ($alias->size() > 1) {
             $classTo = $alias->get(0);
             $namespace = $this->getStore()->getManager()->getConfiguration()->getEntityNamespace($classTo);
             $namespace .= '\\' . $alias->get(1);
             $classTo = $namespace;
         }
         $classTo = new $classTo();
     }
     return Collector::run($classTo, new ItemList($this->app->request()->params()), $matcher);
 }