From 89e020a5cf39ee298f191505ec03a105b23b9760 Mon Sep 17 00:00:00 2001 From: Aleksandar Babic Date: Tue, 26 Aug 2014 22:53:07 +0200 Subject: [PATCH 1/2] Type hinting in Command's constructor (value object mapping) --- src/Laracasts/Commander/CommanderTrait.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Laracasts/Commander/CommanderTrait.php b/src/Laracasts/Commander/CommanderTrait.php index 688768a..c9c21fc 100644 --- a/src/Laracasts/Commander/CommanderTrait.php +++ b/src/Laracasts/Commander/CommanderTrait.php @@ -66,7 +66,15 @@ protected function mapInputToCommand($command, array $input) if (array_key_exists($name, $input)) { - $dependencies[] = $input[$name]; + if($parameter->getClass() !== null) + { + $className = $parameter->getClass()->getName(); + $dependencies[] = new $className($input[$name]); + } + else + { + $dependencies[] = $input[$name]; + } } elseif ($parameter->isDefaultValueAvailable()) { From 8247ea58ab41cf7be04975db7e4a36b07c672ce3 Mon Sep 17 00:00:00 2001 From: Aleksandar Babic Date: Sun, 31 Aug 2014 19:34:48 +0200 Subject: [PATCH 2/2] map to command properties --- src/Laracasts/Commander/CommanderTrait.php | 46 +++++++++++++++++++++- 1 file changed, 44 insertions(+), 2 deletions(-) diff --git a/src/Laracasts/Commander/CommanderTrait.php b/src/Laracasts/Commander/CommanderTrait.php index c9c21fc..aa39748 100644 --- a/src/Laracasts/Commander/CommanderTrait.php +++ b/src/Laracasts/Commander/CommanderTrait.php @@ -56,10 +56,28 @@ public function getCommandBus() */ protected function mapInputToCommand($command, array $input) { - $dependencies = []; - $class = new ReflectionClass($command); + if(!$class->getConstructor()) + { + return $this->mapInputToCommandProperties($class, $input); + } + else + { + return $this->mapInputToCommandConstructor($class, $input); + } + } + + /** + * @param ReflectionClass $class + * @param $input + * @return object + * @throws \InvalidArgumentException + */ + protected function mapInputToCommandConstructor(ReflectionClass $class, array $input) + { + $dependencies = []; + foreach ($class->getConstructor()->getParameters() as $parameter) { $name = $parameter->getName(); @@ -87,6 +105,30 @@ protected function mapInputToCommand($command, array $input) } return $class->newInstanceArgs($dependencies); + + } + + /** + * @param ReflectionClass $class + * @param $input + * @throws \InvalidArgumentException + * @return object + */ + protected function mapInputToCommandProperties(ReflectionClass $class, array $input) + { + $command = $class->newInstance(); + + foreach($class->getProperties(\ReflectionProperty::IS_PUBLIC) as $property) + { + $name = $property->getName(); + + if(array_key_exists($name, $input)) + { + $command->{$name} = $input[$name]; + } + } + + return $command; } }