Explorar o código

[Form] added support for stdClass objects

ReflectionClass doesn't list properties on stdClass objects (or objects cast
from arrays).  This allows these annoymous objects to be used as field data.
Brandon Turner %!s(int64=14) %!d(string=hai) anos
pai
achega
b2e4b452a4
Modificáronse 1 ficheiros con 6 adicións e 0 borrados
  1. 6 0
      src/Symfony/Component/Form/Field.php

+ 6 - 0
src/Symfony/Component/Form/Field.php

@@ -572,6 +572,9 @@ abstract class Field extends Configurable implements FieldInterface
                     throw new PropertyAccessDeniedException(sprintf('Property "%s" is not public in class "%s". Maybe you should create the method "get%s()" or "is%s()"?', $property, $reflClass->getName(), ucfirst($property), ucfirst($property)));
                 }
 
+                return $object->$property;
+            } else if (property_exists($object, $property)) {
+                // needed to support \stdClass instances
                 return $object->$property;
             } else {
                 throw new InvalidPropertyException(sprintf('Neither property "%s" nor method "%s()" nor method "%s()" exists in class "%s"', $property, $getter, $isser, $reflClass->getName()));
@@ -603,6 +606,9 @@ abstract class Field extends Configurable implements FieldInterface
                     throw new PropertyAccessDeniedException(sprintf('Property "%s" is not public in class "%s". Maybe you should create the method "set%s()"?', $property, $reflClass->getName(), ucfirst($property)));
                 }
 
+                $objectOrArray->$property = $this->getData();
+            } else if (property_exists($objectOrArray, $property)) {
+                // needed to support \stdClass instances
                 $objectOrArray->$property = $this->getData();
             } else {
                 throw new InvalidPropertyException(sprintf('Neither element "%s" nor method "%s()" exists in class "%s"', $property, $setter, $reflClass->getName()));