[Form] Fixed PropertyPath handling of __get() method that returns a constant

This commit is contained in:
Bernhard Schussek 2012-07-09 18:15:56 +02:00
parent 39e821c1eb
commit 6e1462e0c0
2 changed files with 13 additions and 1 deletions

View File

@ -213,6 +213,18 @@ class PropertyPathTest extends \PHPUnit_Framework_TestCase
$this->assertSame('foobar', $path->getValue($object));
}
/*
* https://github.com/symfony/symfony/pull/4450
*/
public function testGetValueReadsMagicGetThatReturnsConstant()
{
$path = new PropertyPath('magicProperty');
$object = new Magician();
$this->assertNull($path->getValue($object));
}
/**
* @expectedException Symfony\Component\Form\Exception\PropertyAccessDeniedException
*/

View File

@ -402,7 +402,7 @@ class PropertyPath implements \IteratorAggregate, PropertyPathInterface
$result = $objectOrArray->$hasser();
} elseif ($reflClass->hasMethod('__get')) {
// needed to support magic method __get
$result =& $objectOrArray->$property;
$result = $objectOrArray->$property;
} elseif ($reflClass->hasProperty($property)) {
if (!$reflClass->getProperty($property)->isPublic()) {
throw new PropertyAccessDeniedException(sprintf('Property "%s" is not public in class "%s". Maybe you should create the method "%s()" or "%s()"?', $property, $reflClass->name, $getter, $isser));