Merge branch '2.6' into 2.7
* 2.6: [travis] Use container-based infrastructure [PropertyAccess] Fix setting public property on a class having a magic getter ContainerInterface: unused exception dropped Conflicts: .travis.yml
This commit is contained in:
commit
81c054ad87
25
.travis.yml
25
.travis.yml
|
@ -1,5 +1,16 @@
|
||||||
language: php
|
language: php
|
||||||
|
|
||||||
|
sudo: false
|
||||||
|
|
||||||
|
cache:
|
||||||
|
directories:
|
||||||
|
- $HOME/.composer/cache
|
||||||
|
|
||||||
|
addons:
|
||||||
|
apt_packages:
|
||||||
|
- parallel
|
||||||
|
- language-pack-fr-base
|
||||||
|
|
||||||
matrix:
|
matrix:
|
||||||
include:
|
include:
|
||||||
- php: 5.3
|
- php: 5.3
|
||||||
|
@ -25,15 +36,13 @@ env:
|
||||||
- SYMFONY_DEPRECATIONS_HELPER=weak
|
- SYMFONY_DEPRECATIONS_HELPER=weak
|
||||||
|
|
||||||
before_install:
|
before_install:
|
||||||
- travis_retry sudo apt-get install parallel
|
|
||||||
- composer self-update
|
- composer self-update
|
||||||
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]]; then phpenv config-rm xdebug.ini; fi;
|
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]] && [[ "$TRAVIS_PHP_VERSION" != "hhvm" ]]; then phpenv config-rm xdebug.ini; fi;
|
||||||
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]]; then echo "extension = mongo.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi;
|
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]] && [[ "$TRAVIS_PHP_VERSION" != "hhvm" ]]; then echo "extension = mongo.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi;
|
||||||
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]] && [ $(php -r "echo PHP_MINOR_VERSION;") -le 4 ]; then echo "extension = apc.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi;
|
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]] && [[ "$TRAVIS_PHP_VERSION" != "hhvm" ]] && [ $(php -r "echo PHP_MINOR_VERSION;") -le 4 ]; then echo "extension = apc.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini; fi;
|
||||||
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]]; then (pecl install -f memcached-2.1.0 && echo "extension = memcache.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini) || echo "Let's continue without memcache extension"; fi;
|
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]] && [[ "$TRAVIS_PHP_VERSION" != "hhvm" ]]; then (pecl install -f memcached-2.1.0 && echo "extension = memcache.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini) || echo "Let's continue without memcache extension"; fi;
|
||||||
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]]; then (cd src/Symfony/Component/Debug/Resources/ext && phpize && ./configure && make && echo "extension = $(pwd)/modules/symfony_debug.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini); fi;
|
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]] && [[ "$TRAVIS_PHP_VERSION" != "hhvm" ]]; then (cd src/Symfony/Component/Debug/Resources/ext && phpize && ./configure && make && echo "extension = $(pwd)/modules/symfony_debug.so" >> ~/.phpenv/versions/$(phpenv version-name)/etc/php.ini); fi;
|
||||||
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]]; then php -i; fi;
|
- if [[ "$TRAVIS_PHP_VERSION" != "nightly" ]] && [[ "$TRAVIS_PHP_VERSION" != "hhvm" ]]; then php -i; fi;
|
||||||
- sudo locale-gen fr_FR.UTF-8 && sudo update-locale
|
|
||||||
# Set the COMPOSER_ROOT_VERSION to the right version according to the branch being built
|
# Set the COMPOSER_ROOT_VERSION to the right version according to the branch being built
|
||||||
- if [ "$TRAVIS_BRANCH" = "master" ]; then export COMPOSER_ROOT_VERSION=dev-master; else export COMPOSER_ROOT_VERSION="$TRAVIS_BRANCH".x-dev; fi;
|
- if [ "$TRAVIS_BRANCH" = "master" ]; then export COMPOSER_ROOT_VERSION=dev-master; else export COMPOSER_ROOT_VERSION="$TRAVIS_BRANCH".x-dev; fi;
|
||||||
|
|
||||||
|
|
|
@ -259,7 +259,6 @@ class Container implements IntrospectableContainerInterface
|
||||||
*
|
*
|
||||||
* @return object The associated service
|
* @return object The associated service
|
||||||
*
|
*
|
||||||
* @throws InvalidArgumentException if the service is not defined
|
|
||||||
* @throws ServiceCircularReferenceException When a circular reference is detected
|
* @throws ServiceCircularReferenceException When a circular reference is detected
|
||||||
* @throws ServiceNotFoundException When the service is not defined
|
* @throws ServiceNotFoundException When the service is not defined
|
||||||
* @throws \Exception if an exception has been thrown when the service has been resolved
|
* @throws \Exception if an exception has been thrown when the service has been resolved
|
||||||
|
|
|
@ -50,7 +50,6 @@ interface ContainerInterface
|
||||||
*
|
*
|
||||||
* @return object The associated service
|
* @return object The associated service
|
||||||
*
|
*
|
||||||
* @throws InvalidArgumentException if the service is not defined
|
|
||||||
* @throws ServiceCircularReferenceException When a circular reference is detected
|
* @throws ServiceCircularReferenceException When a circular reference is detected
|
||||||
* @throws ServiceNotFoundException When the service is not defined
|
* @throws ServiceNotFoundException When the service is not defined
|
||||||
*
|
*
|
||||||
|
|
|
@ -314,11 +314,11 @@ class PropertyAccessor implements PropertyAccessorInterface
|
||||||
$result[self::VALUE] = $object->$isser();
|
$result[self::VALUE] = $object->$isser();
|
||||||
} elseif ($reflClass->hasMethod($hasser) && $reflClass->getMethod($hasser)->isPublic()) {
|
} elseif ($reflClass->hasMethod($hasser) && $reflClass->getMethod($hasser)->isPublic()) {
|
||||||
$result[self::VALUE] = $object->$hasser();
|
$result[self::VALUE] = $object->$hasser();
|
||||||
} elseif ($reflClass->hasMethod('__get') && $reflClass->getMethod('__get')->isPublic()) {
|
|
||||||
$result[self::VALUE] = $object->$property;
|
|
||||||
} elseif ($classHasProperty && $reflClass->getProperty($property)->isPublic()) {
|
} elseif ($classHasProperty && $reflClass->getProperty($property)->isPublic()) {
|
||||||
$result[self::VALUE] = &$object->$property;
|
$result[self::VALUE] = &$object->$property;
|
||||||
$result[self::IS_REF] = true;
|
$result[self::IS_REF] = true;
|
||||||
|
} elseif ($reflClass->hasMethod('__get') && $reflClass->getMethod('__get')->isPublic()) {
|
||||||
|
$result[self::VALUE] = $object->$property;
|
||||||
} elseif (!$classHasProperty && property_exists($object, $property)) {
|
} elseif (!$classHasProperty && property_exists($object, $property)) {
|
||||||
// Needed to support \stdClass instances. We need to explicitly
|
// Needed to support \stdClass instances. We need to explicitly
|
||||||
// exclude $classHasProperty, otherwise if in the previous clause
|
// exclude $classHasProperty, otherwise if in the previous clause
|
||||||
|
@ -410,10 +410,10 @@ class PropertyAccessor implements PropertyAccessorInterface
|
||||||
$object->$setter($value);
|
$object->$setter($value);
|
||||||
} elseif ($this->isMethodAccessible($reflClass, $getsetter, 1)) {
|
} elseif ($this->isMethodAccessible($reflClass, $getsetter, 1)) {
|
||||||
$object->$getsetter($value);
|
$object->$getsetter($value);
|
||||||
} elseif ($this->isMethodAccessible($reflClass, '__set', 2)) {
|
|
||||||
$object->$property = $value;
|
|
||||||
} elseif ($classHasProperty && $reflClass->getProperty($property)->isPublic()) {
|
} elseif ($classHasProperty && $reflClass->getProperty($property)->isPublic()) {
|
||||||
$object->$property = $value;
|
$object->$property = $value;
|
||||||
|
} elseif ($this->isMethodAccessible($reflClass, '__set', 2)) {
|
||||||
|
$object->$property = $value;
|
||||||
} elseif (!$classHasProperty && property_exists($object, $property)) {
|
} elseif (!$classHasProperty && property_exists($object, $property)) {
|
||||||
// Needed to support \stdClass instances. We need to explicitly
|
// Needed to support \stdClass instances. We need to explicitly
|
||||||
// exclude $classHasProperty, otherwise if in the previous clause
|
// exclude $classHasProperty, otherwise if in the previous clause
|
||||||
|
|
|
@ -15,6 +15,8 @@ class TestClassMagicGet
|
||||||
{
|
{
|
||||||
private $magicProperty;
|
private $magicProperty;
|
||||||
|
|
||||||
|
public $publicProperty;
|
||||||
|
|
||||||
public function __construct($value)
|
public function __construct($value)
|
||||||
{
|
{
|
||||||
$this->magicProperty = $value;
|
$this->magicProperty = $value;
|
||||||
|
|
|
@ -438,4 +438,12 @@ class PropertyAccessorTest extends \PHPUnit_Framework_TestCase
|
||||||
|
|
||||||
$this->assertEquals('foobar', $object->getProperty());
|
$this->assertEquals('foobar', $object->getProperty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function testSetValueDeepWithMagicGetter()
|
||||||
|
{
|
||||||
|
$obj = new TestClassMagicGet('foo');
|
||||||
|
$obj->publicProperty = array('foo' => array('bar' => 'some_value'));
|
||||||
|
$this->propertyAccessor->setValue($obj, 'publicProperty[foo][bar]', 'Updated');
|
||||||
|
$this->assertSame('Updated', $obj->publicProperty['foo']['bar']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Reference in New Issue