Merge branch '2.8' into 3.0

* 2.8:
  fixed CS
  fixed CS
  fixed test
  fixed CS
  Remove default match from AbstractConfigCommand::findExtension
  [FrameworkBundle][Validator] Fix apc cache service deprecation
This commit is contained in:
Fabien Potencier 2016-01-21 10:38:31 +01:00
commit dba07f35c1
34 changed files with 123 additions and 82 deletions

View File

@ -780,6 +780,27 @@ UPGRADE FROM 2.x to 3.0
interface. interface.
The `security.csrf.token_manager` should be used instead. The `security.csrf.token_manager` should be used instead.
* The `validator.mapping.cache.apc` service has been removed in favor of the `validator.mapping.cache.doctrine.apc` one.
* The ability to pass `apc` as the `framework.validation.cache` configuration key value has been removed.
Use `validator.mapping.cache.doctrine.apc` instead:
Before:
```yaml
framework:
validation:
cache: apc
```
After:
```yaml
framework:
validation:
cache: validator.mapping.cache.doctrine.apc
```
### HttpKernel ### HttpKernel
* The `Symfony\Component\HttpKernel\Log\LoggerInterface` has been removed in * The `Symfony\Component\HttpKernel\Log\LoggerInterface` has been removed in

View File

@ -109,5 +109,4 @@ EOPHP
); );
} }
} }
} }

View File

@ -87,17 +87,17 @@ class TranslationExtensionTest extends \PHPUnit_Framework_TestCase
// transchoice // transchoice
array('{% transchoice count from "messages" %}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples{% endtranschoice %}', array('{% transchoice count from "messages" %}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples{% endtranschoice %}',
'There is no apples', array('count' => 0),), 'There is no apples', array('count' => 0)),
array('{% transchoice count %}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples{% endtranschoice %}', array('{% transchoice count %}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples{% endtranschoice %}',
'There is 5 apples', array('count' => 5),), 'There is 5 apples', array('count' => 5)),
array('{% transchoice count %}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples (%name%){% endtranschoice %}', array('{% transchoice count %}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples (%name%){% endtranschoice %}',
'There is 5 apples (Symfony)', array('count' => 5, 'name' => 'Symfony'),), 'There is 5 apples (Symfony)', array('count' => 5, 'name' => 'Symfony')),
array('{% transchoice count with { \'%name%\': \'Symfony\' } %}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples (%name%){% endtranschoice %}', array('{% transchoice count with { \'%name%\': \'Symfony\' } %}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples (%name%){% endtranschoice %}',
'There is 5 apples (Symfony)', array('count' => 5),), 'There is 5 apples (Symfony)', array('count' => 5)),
array('{% transchoice count into "fr"%}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples{% endtranschoice %}', array('{% transchoice count into "fr"%}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples{% endtranschoice %}',
'There is no apples', array('count' => 0),), 'There is no apples', array('count' => 0)),
array('{% transchoice 5 into "fr"%}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples{% endtranschoice %}', array('{% transchoice 5 into "fr"%}{0} There is no apples|{1} There is one apple|]1,Inf] There is %count% apples{% endtranschoice %}',
'There is 5 apples',), 'There is 5 apples'),
// trans filter // trans filter
array('{{ "Hello"|trans }}', 'Hello'), array('{{ "Hello"|trans }}', 'Hello'),

View File

@ -45,28 +45,27 @@ abstract class AbstractConfigCommand extends ContainerDebugCommand
protected function findExtension($name) protected function findExtension($name)
{ {
$extension = null;
$bundles = $this->initializeBundles(); $bundles = $this->initializeBundles();
foreach ($bundles as $bundle) { foreach ($bundles as $bundle) {
if ($name === $bundle->getName()) {
return $bundle->getContainerExtension();
}
$extension = $bundle->getContainerExtension(); $extension = $bundle->getContainerExtension();
if ($extension && $name === $extension->getAlias()) {
if ($extension && ($name === $extension->getAlias() || $name === $bundle->getName())) { return $extension;
break;
} }
} }
if (!$extension) { if ('Bundle' !== substr($name, -6)) {
$message = sprintf('No extension with alias "%s" is enabled', $name);
if (preg_match('/Bundle$/', $name)) {
$message = sprintf('No extensions with configuration available for "%s"', $name); $message = sprintf('No extensions with configuration available for "%s"', $name);
} else {
$message = sprintf('No extension with alias "%s" is enabled', $name);
} }
throw new \LogicException($message); throw new \LogicException($message);
} }
return $extension;
}
public function validateConfiguration(ExtensionInterface $extension, $configuration) public function validateConfiguration(ExtensionInterface $extension, $configuration)
{ {
if (!$configuration) { if (!$configuration) {

View File

@ -439,7 +439,15 @@ class Configuration implements ConfigurationInterface
->scalarNode('cache') ->scalarNode('cache')
->beforeNormalization() ->beforeNormalization()
// Can be removed in 3.0, once ApcCache support is dropped // Can be removed in 3.0, once ApcCache support is dropped
->ifString()->then(function ($v) { return 'apc' === $v ? 'validator.mapping.cache.apc' : $v; }) ->ifString()->then(function ($v) {
if ('apc' === $v) {
@trigger_error('The ability to pass "apc" as the framework.validation.cache configuration key value is deprecated since version 2.8 and will be removed in 3.0. Use the "validator.mapping.cache.doctrine.apc" service id instead.', E_USER_DEPRECATED);
return 'validator.mapping.cache.apc';
}
return $v;
})
->end() ->end()
->end() ->end()
->booleanNode('enable_annotations')->defaultFalse()->end() ->booleanNode('enable_annotations')->defaultFalse()->end()

View File

@ -28,8 +28,14 @@
<service id="validator.mapping.class_metadata_factory" alias="validator" public="false" /> <service id="validator.mapping.class_metadata_factory" alias="validator" public="false" />
<service id="validator.mapping.cache.apc" class="Symfony\Component\Validator\Mapping\Cache\ApcCache" public="false"> <service id="validator.mapping.cache.doctrine.apc" class="Symfony\Component\Validator\Mapping\Cache\DoctrineCache" public="false">
<argument type="service">
<service class="Doctrine\Common\Cache\ApcCache">
<call method="setNamespace">
<argument>%validator.mapping.cache.prefix%</argument> <argument>%validator.mapping.cache.prefix%</argument>
</call>
</service>
</argument>
</service> </service>
<service id="validator.validator_factory" class="Symfony\Bundle\FrameworkBundle\Validator\ConstraintValidatorFactory" public="false"> <service id="validator.validator_factory" class="Symfony\Bundle\FrameworkBundle\Validator\ConstraintValidatorFactory" public="false">

View File

@ -56,7 +56,7 @@ $container->loadFromExtension('framework', array(
), ),
'validation' => array( 'validation' => array(
'enabled' => true, 'enabled' => true,
'cache' => 'apc', 'cache' => 'validator.mapping.cache.doctrine.apc',
), ),
'annotations' => array( 'annotations' => array(
'cache' => 'file', 'cache' => 'file',

View File

@ -38,7 +38,7 @@
<framework:translator enabled="true" fallback="fr" logging="true"> <framework:translator enabled="true" fallback="fr" logging="true">
<framework:path>%kernel.root_dir%/Fixtures/translations</framework:path> <framework:path>%kernel.root_dir%/Fixtures/translations</framework:path>
</framework:translator> </framework:translator>
<framework:validation enabled="true" cache="apc" /> <framework:validation enabled="true" cache="validator.mapping.cache.doctrine.apc" />
<framework:annotations cache="file" debug="true" file-cache-dir="%kernel.cache_dir%/annotations" /> <framework:annotations cache="file" debug="true" file-cache-dir="%kernel.cache_dir%/annotations" />
<framework:serializer enabled="true" enable-annotations="true" cache="serializer.mapping.cache.apc" name-converter="serializer.name_converter.camel_case_to_snake_case" /> <framework:serializer enabled="true" enable-annotations="true" cache="serializer.mapping.cache.apc" name-converter="serializer.name_converter.camel_case_to_snake_case" />
</framework:config> </framework:config>

View File

@ -44,7 +44,7 @@ framework:
paths: ['%kernel.root_dir%/Fixtures/translations'] paths: ['%kernel.root_dir%/Fixtures/translations']
validation: validation:
enabled: true enabled: true
cache: apc cache: validator.mapping.cache.doctrine.apc
annotations: annotations:
cache: file cache: file
debug: true debug: true

View File

@ -300,7 +300,7 @@ abstract class FrameworkExtensionTest extends TestCase
$this->assertSame('addMethodMapping', $calls[4][0]); $this->assertSame('addMethodMapping', $calls[4][0]);
$this->assertSame(array('loadValidatorMetadata'), $calls[4][1]); $this->assertSame(array('loadValidatorMetadata'), $calls[4][1]);
$this->assertSame('setMetadataCache', $calls[5][0]); $this->assertSame('setMetadataCache', $calls[5][0]);
$this->assertEquals(array(new Reference('validator.mapping.cache.apc')), $calls[5][1]); $this->assertEquals(array(new Reference('validator.mapping.cache.doctrine.apc')), $calls[5][1]);
} }
public function testValidationService() public function testValidationService()

View File

@ -45,5 +45,4 @@ interface ResourceCheckerInterface
* @return bool True if the resource has not changed since the given timestamp, false otherwise. * @return bool True if the resource has not changed since the given timestamp, false otherwise.
*/ */
public function isFresh(ResourceInterface $resource, $timestamp); public function isFresh(ResourceInterface $resource, $timestamp);
} }

View File

@ -602,7 +602,6 @@ EOF;
* *
* This service is autowired. * This service is autowired.
EOF; EOF;
} }
if ($definition->isLazy()) { if ($definition->isLazy()) {

View File

@ -1005,7 +1005,6 @@ class FilesystemTest extends FilesystemTestCase
// The compress.zlib:// stream does not support mode x: creates the file, errors "failed to open stream: operation failed" and returns false // The compress.zlib:// stream does not support mode x: creates the file, errors "failed to open stream: operation failed" and returns false
$this->filesystem->tempnam($dirname, 'bar'); $this->filesystem->tempnam($dirname, 'bar');
} }
public function testTempnamWithPHPTempSchemeFails() public function testTempnamWithPHPTempSchemeFails()

View File

@ -521,8 +521,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
$finder->in(__DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR.'r+e.gex[c]a(r)s') $finder->in(__DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR.'r+e.gex[c]a(r)s')
->path('/^dir/'); ->path('/^dir/');
$expected = array('r+e.gex[c]a(r)s'.DIRECTORY_SEPARATOR.'dir', $expected = array('r+e.gex[c]a(r)s'.DIRECTORY_SEPARATOR.'dir', 'r+e.gex[c]a(r)s'.DIRECTORY_SEPARATOR.'dir'.DIRECTORY_SEPARATOR.'bar.dat');
'r+e.gex[c]a(r)s'.DIRECTORY_SEPARATOR.'dir'.DIRECTORY_SEPARATOR.'bar.dat',);
$this->assertIterator($this->toAbsoluteFixtures($expected), $finder); $this->assertIterator($this->toAbsoluteFixtures($expected), $finder);
} }

View File

@ -43,7 +43,8 @@ class AttributeBagTest extends \PHPUnit_Framework_TestCase
'category' => array( 'category' => array(
'fishing' => array( 'fishing' => array(
'first' => 'cod', 'first' => 'cod',
'second' => 'sole',), 'second' => 'sole',
),
), ),
); );
$this->bag = new AttributeBag('_sf2'); $this->bag = new AttributeBag('_sf2');

View File

@ -43,7 +43,8 @@ class NamespacedAttributeBagTest extends \PHPUnit_Framework_TestCase
'category' => array( 'category' => array(
'fishing' => array( 'fishing' => array(
'first' => 'cod', 'first' => 'cod',
'second' => 'sole',), 'second' => 'sole',
),
), ),
); );
$this->bag = new NamespacedAttributeBag('_sf2', '/'); $this->bag = new NamespacedAttributeBag('_sf2', '/');

View File

@ -38,7 +38,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
array('/foo'), array('/foo'),
'/foo', '#^/foo$#s', array(), array( '/foo', '#^/foo$#s', array(), array(
array('text', '/foo'), array('text', '/foo'),
),), ),
),
array( array(
'Route with a variable', 'Route with a variable',
@ -46,7 +47,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
'/foo', '#^/foo/(?P<bar>[^/]++)$#s', array('bar'), array( '/foo', '#^/foo/(?P<bar>[^/]++)$#s', array('bar'), array(
array('variable', '/', '[^/]++', 'bar'), array('variable', '/', '[^/]++', 'bar'),
array('text', '/foo'), array('text', '/foo'),
),), ),
),
array( array(
'Route with a variable that has a default value', 'Route with a variable that has a default value',
@ -54,7 +56,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
'/foo', '#^/foo(?:/(?P<bar>[^/]++))?$#s', array('bar'), array( '/foo', '#^/foo(?:/(?P<bar>[^/]++))?$#s', array('bar'), array(
array('variable', '/', '[^/]++', 'bar'), array('variable', '/', '[^/]++', 'bar'),
array('text', '/foo'), array('text', '/foo'),
),), ),
),
array( array(
'Route with several variables', 'Route with several variables',
@ -63,7 +66,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
array('variable', '/', '[^/]++', 'foobar'), array('variable', '/', '[^/]++', 'foobar'),
array('variable', '/', '[^/]++', 'bar'), array('variable', '/', '[^/]++', 'bar'),
array('text', '/foo'), array('text', '/foo'),
),), ),
),
array( array(
'Route with several variables that have default values', 'Route with several variables that have default values',
@ -72,7 +76,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
array('variable', '/', '[^/]++', 'foobar'), array('variable', '/', '[^/]++', 'foobar'),
array('variable', '/', '[^/]++', 'bar'), array('variable', '/', '[^/]++', 'bar'),
array('text', '/foo'), array('text', '/foo'),
),), ),
),
array( array(
'Route with several variables but some of them have no default values', 'Route with several variables but some of them have no default values',
@ -81,28 +86,32 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
array('variable', '/', '[^/]++', 'foobar'), array('variable', '/', '[^/]++', 'foobar'),
array('variable', '/', '[^/]++', 'bar'), array('variable', '/', '[^/]++', 'bar'),
array('text', '/foo'), array('text', '/foo'),
),), ),
),
array( array(
'Route with an optional variable as the first segment', 'Route with an optional variable as the first segment',
array('/{bar}', array('bar' => 'bar')), array('/{bar}', array('bar' => 'bar')),
'', '#^/(?P<bar>[^/]++)?$#s', array('bar'), array( '', '#^/(?P<bar>[^/]++)?$#s', array('bar'), array(
array('variable', '/', '[^/]++', 'bar'), array('variable', '/', '[^/]++', 'bar'),
),), ),
),
array( array(
'Route with a requirement of 0', 'Route with a requirement of 0',
array('/{bar}', array('bar' => null), array('bar' => '0')), array('/{bar}', array('bar' => null), array('bar' => '0')),
'', '#^/(?P<bar>0)?$#s', array('bar'), array( '', '#^/(?P<bar>0)?$#s', array('bar'), array(
array('variable', '/', '0', 'bar'), array('variable', '/', '0', 'bar'),
),), ),
),
array( array(
'Route with an optional variable as the first segment with requirements', 'Route with an optional variable as the first segment with requirements',
array('/{bar}', array('bar' => 'bar'), array('bar' => '(foo|bar)')), array('/{bar}', array('bar' => 'bar'), array('bar' => '(foo|bar)')),
'', '#^/(?P<bar>(foo|bar))?$#s', array('bar'), array( '', '#^/(?P<bar>(foo|bar))?$#s', array('bar'), array(
array('variable', '/', '(foo|bar)', 'bar'), array('variable', '/', '(foo|bar)', 'bar'),
),), ),
),
array( array(
'Route with only optional variables', 'Route with only optional variables',
@ -110,7 +119,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
'', '#^/(?P<foo>[^/]++)?(?:/(?P<bar>[^/]++))?$#s', array('foo', 'bar'), array( '', '#^/(?P<foo>[^/]++)?(?:/(?P<bar>[^/]++))?$#s', array('foo', 'bar'), array(
array('variable', '/', '[^/]++', 'bar'), array('variable', '/', '[^/]++', 'bar'),
array('variable', '/', '[^/]++', 'foo'), array('variable', '/', '[^/]++', 'foo'),
),), ),
),
array( array(
'Route with a variable in last position', 'Route with a variable in last position',
@ -118,7 +128,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
'/foo', '#^/foo\-(?P<bar>[^/]++)$#s', array('bar'), array( '/foo', '#^/foo\-(?P<bar>[^/]++)$#s', array('bar'), array(
array('variable', '-', '[^/]++', 'bar'), array('variable', '-', '[^/]++', 'bar'),
array('text', '/foo'), array('text', '/foo'),
),), ),
),
array( array(
'Route with nested placeholders', 'Route with nested placeholders',
@ -127,7 +138,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
array('text', 'static}'), array('text', 'static}'),
array('variable', '', '[^/]+', 'var'), array('variable', '', '[^/]+', 'var'),
array('text', '/{static'), array('text', '/{static'),
),), ),
),
array( array(
'Route without separator between variables', 'Route without separator between variables',
@ -138,7 +150,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
array('variable', '', '(y|Y)', 'y'), array('variable', '', '(y|Y)', 'y'),
array('variable', '', '[^/\.]+', 'x'), array('variable', '', '[^/\.]+', 'x'),
array('variable', '/', '[^/\.]+', 'w'), array('variable', '/', '[^/\.]+', 'w'),
),), ),
),
array( array(
'Route with a format', 'Route with a format',
@ -147,7 +160,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
array('variable', '.', '[^/]++', '_format'), array('variable', '.', '[^/]++', '_format'),
array('variable', '/', '[^/\.]++', 'bar'), array('variable', '/', '[^/\.]++', 'bar'),
array('text', '/foo'), array('text', '/foo'),
),), ),
),
); );
} }

View File

@ -105,5 +105,4 @@ class LdapUserProvider implements UserProviderInterface
{ {
return $class === 'Symfony\Component\Security\Core\User\User'; return $class === 'Symfony\Component\Security\Core\User\User';
} }
} }

View File

@ -249,7 +249,6 @@ class Serializer implements SerializerInterface, NormalizerInterface, Denormaliz
foreach ($this->normalizers as $normalizer) { foreach ($this->normalizers as $normalizer) {
if ($normalizer instanceof DenormalizerInterface if ($normalizer instanceof DenormalizerInterface
&& $normalizer->supportsDenormalization($data, $class, $format)) { && $normalizer->supportsDenormalization($data, $class, $format)) {
return $normalizer->denormalize($data, $class, $format, $context); return $normalizer->denormalize($data, $class, $format, $context);
} }
} }

View File

@ -439,4 +439,3 @@ class StaticPropertyDummy
{ {
private static $property = 'value'; private static $property = 'value';
} }

View File

@ -79,5 +79,4 @@ class TargetOperationTest extends AbstractOperationTest
{ {
return new TargetOperation($source, $target); return new TargetOperation($source, $target);
} }
} }

View File

@ -33,13 +33,13 @@ class Escaper
"\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f", "\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f",
"\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17", "\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17",
"\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f", "\x18", "\x19", "\x1a", "\x1b", "\x1c", "\x1d", "\x1e", "\x1f",
"\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9",); "\xc2\x85", "\xc2\xa0", "\xe2\x80\xa8", "\xe2\x80\xa9");
private static $escaped = array('\\\\', '\\"', '\\\\', '\\"', private static $escaped = array('\\\\', '\\"', '\\\\', '\\"',
'\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a', '\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a',
'\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f', '\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f',
'\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17', '\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17',
'\\x18', '\\x19', '\\x1a', '\\e', '\\x1c', '\\x1d', '\\x1e', '\\x1f', '\\x18', '\\x19', '\\x1a', '\\e', '\\x1c', '\\x1d', '\\x1e', '\\x1f',
'\\N', '\\_', '\\L', '\\P',); '\\N', '\\_', '\\L', '\\P');
/** /**
* Determines if a PHP value would require double quoting in YAML. * Determines if a PHP value would require double quoting in YAML.

View File

@ -26,7 +26,7 @@ class Unescaper
/** /**
* Regex fragment that matches an escaped character in a double quoted string. * Regex fragment that matches an escaped character in a double quoted string.
*/ */
const REGEX_ESCAPED_CHARACTER = "\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)"; const REGEX_ESCAPED_CHARACTER = '\\\\(x[0-9a-fA-F]{2}|u[0-9a-fA-F]{4}|U[0-9a-fA-F]{8}|.)';
/** /**
* Unescapes a single quoted string. * Unescapes a single quoted string.