/** * 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; }
/** * 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); }