소스 검색

[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 14 년 전
부모
커밋
b2e4b452a4
1개의 변경된 파일6개의 추가작업 그리고 0개의 파일을 삭제
  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()));