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:
commit
dba07f35c1
|
@ -780,6 +780,27 @@ UPGRADE FROM 2.x to 3.0
|
|||
interface.
|
||||
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
|
||||
|
||||
* The `Symfony\Component\HttpKernel\Log\LoggerInterface` has been removed in
|
||||
|
|
|
@ -109,5 +109,4 @@ EOPHP
|
|||
);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -87,17 +87,17 @@ class TranslationExtensionTest extends \PHPUnit_Framework_TestCase
|
|||
|
||||
// transchoice
|
||||
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 %}',
|
||||
'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 %}',
|
||||
'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 %}',
|
||||
'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 %}',
|
||||
'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 %}',
|
||||
'There is 5 apples',),
|
||||
'There is 5 apples'),
|
||||
|
||||
// trans filter
|
||||
array('{{ "Hello"|trans }}', 'Hello'),
|
||||
|
|
|
@ -45,28 +45,27 @@ abstract class AbstractConfigCommand extends ContainerDebugCommand
|
|||
|
||||
protected function findExtension($name)
|
||||
{
|
||||
$extension = null;
|
||||
$bundles = $this->initializeBundles();
|
||||
foreach ($bundles as $bundle) {
|
||||
if ($name === $bundle->getName()) {
|
||||
return $bundle->getContainerExtension();
|
||||
}
|
||||
|
||||
$extension = $bundle->getContainerExtension();
|
||||
|
||||
if ($extension && ($name === $extension->getAlias() || $name === $bundle->getName())) {
|
||||
break;
|
||||
if ($extension && $name === $extension->getAlias()) {
|
||||
return $extension;
|
||||
}
|
||||
}
|
||||
|
||||
if (!$extension) {
|
||||
$message = sprintf('No extension with alias "%s" is enabled', $name);
|
||||
if (preg_match('/Bundle$/', $name)) {
|
||||
if ('Bundle' !== substr($name, -6)) {
|
||||
$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);
|
||||
}
|
||||
|
||||
return $extension;
|
||||
}
|
||||
|
||||
public function validateConfiguration(ExtensionInterface $extension, $configuration)
|
||||
{
|
||||
if (!$configuration) {
|
||||
|
|
|
@ -439,7 +439,15 @@ class Configuration implements ConfigurationInterface
|
|||
->scalarNode('cache')
|
||||
->beforeNormalization()
|
||||
// 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()
|
||||
->booleanNode('enable_annotations')->defaultFalse()->end()
|
||||
|
|
|
@ -28,8 +28,14 @@
|
|||
|
||||
<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>
|
||||
</call>
|
||||
</service>
|
||||
</argument>
|
||||
</service>
|
||||
|
||||
<service id="validator.validator_factory" class="Symfony\Bundle\FrameworkBundle\Validator\ConstraintValidatorFactory" public="false">
|
||||
|
|
|
@ -56,7 +56,7 @@ $container->loadFromExtension('framework', array(
|
|||
),
|
||||
'validation' => array(
|
||||
'enabled' => true,
|
||||
'cache' => 'apc',
|
||||
'cache' => 'validator.mapping.cache.doctrine.apc',
|
||||
),
|
||||
'annotations' => array(
|
||||
'cache' => 'file',
|
||||
|
|
|
@ -38,7 +38,7 @@
|
|||
<framework:translator enabled="true" fallback="fr" logging="true">
|
||||
<framework:path>%kernel.root_dir%/Fixtures/translations</framework:path>
|
||||
</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:serializer enabled="true" enable-annotations="true" cache="serializer.mapping.cache.apc" name-converter="serializer.name_converter.camel_case_to_snake_case" />
|
||||
</framework:config>
|
||||
|
|
|
@ -44,7 +44,7 @@ framework:
|
|||
paths: ['%kernel.root_dir%/Fixtures/translations']
|
||||
validation:
|
||||
enabled: true
|
||||
cache: apc
|
||||
cache: validator.mapping.cache.doctrine.apc
|
||||
annotations:
|
||||
cache: file
|
||||
debug: true
|
||||
|
|
|
@ -300,7 +300,7 @@ abstract class FrameworkExtensionTest extends TestCase
|
|||
$this->assertSame('addMethodMapping', $calls[4][0]);
|
||||
$this->assertSame(array('loadValidatorMetadata'), $calls[4][1]);
|
||||
$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()
|
||||
|
|
|
@ -45,5 +45,4 @@ interface ResourceCheckerInterface
|
|||
* @return bool True if the resource has not changed since the given timestamp, false otherwise.
|
||||
*/
|
||||
public function isFresh(ResourceInterface $resource, $timestamp);
|
||||
|
||||
}
|
||||
|
|
|
@ -602,7 +602,6 @@ EOF;
|
|||
*
|
||||
* This service is autowired.
|
||||
EOF;
|
||||
|
||||
}
|
||||
|
||||
if ($definition->isLazy()) {
|
||||
|
|
|
@ -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
|
||||
$this->filesystem->tempnam($dirname, 'bar');
|
||||
|
||||
}
|
||||
|
||||
public function testTempnamWithPHPTempSchemeFails()
|
||||
|
|
|
@ -521,8 +521,7 @@ class FinderTest extends Iterator\RealIteratorTestCase
|
|||
$finder->in(__DIR__.DIRECTORY_SEPARATOR.'Fixtures'.DIRECTORY_SEPARATOR.'r+e.gex[c]a(r)s')
|
||||
->path('/^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',);
|
||||
$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');
|
||||
$this->assertIterator($this->toAbsoluteFixtures($expected), $finder);
|
||||
}
|
||||
|
||||
|
|
|
@ -43,7 +43,8 @@ class AttributeBagTest extends \PHPUnit_Framework_TestCase
|
|||
'category' => array(
|
||||
'fishing' => array(
|
||||
'first' => 'cod',
|
||||
'second' => 'sole',),
|
||||
'second' => 'sole',
|
||||
),
|
||||
),
|
||||
);
|
||||
$this->bag = new AttributeBag('_sf2');
|
||||
|
|
|
@ -43,7 +43,8 @@ class NamespacedAttributeBagTest extends \PHPUnit_Framework_TestCase
|
|||
'category' => array(
|
||||
'fishing' => array(
|
||||
'first' => 'cod',
|
||||
'second' => 'sole',),
|
||||
'second' => 'sole',
|
||||
),
|
||||
),
|
||||
);
|
||||
$this->bag = new NamespacedAttributeBag('_sf2', '/');
|
||||
|
|
|
@ -38,7 +38,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||
array('/foo'),
|
||||
'/foo', '#^/foo$#s', array(), array(
|
||||
array('text', '/foo'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'Route with a variable',
|
||||
|
@ -46,7 +47,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||
'/foo', '#^/foo/(?P<bar>[^/]++)$#s', array('bar'), array(
|
||||
array('variable', '/', '[^/]++', 'bar'),
|
||||
array('text', '/foo'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'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(
|
||||
array('variable', '/', '[^/]++', 'bar'),
|
||||
array('text', '/foo'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'Route with several variables',
|
||||
|
@ -63,7 +66,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||
array('variable', '/', '[^/]++', 'foobar'),
|
||||
array('variable', '/', '[^/]++', 'bar'),
|
||||
array('text', '/foo'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'Route with several variables that have default values',
|
||||
|
@ -72,7 +76,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||
array('variable', '/', '[^/]++', 'foobar'),
|
||||
array('variable', '/', '[^/]++', 'bar'),
|
||||
array('text', '/foo'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'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', '/', '[^/]++', 'bar'),
|
||||
array('text', '/foo'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'Route with an optional variable as the first segment',
|
||||
array('/{bar}', array('bar' => 'bar')),
|
||||
'', '#^/(?P<bar>[^/]++)?$#s', array('bar'), array(
|
||||
array('variable', '/', '[^/]++', 'bar'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'Route with a requirement of 0',
|
||||
array('/{bar}', array('bar' => null), array('bar' => '0')),
|
||||
'', '#^/(?P<bar>0)?$#s', array('bar'), array(
|
||||
array('variable', '/', '0', 'bar'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'Route with an optional variable as the first segment with requirements',
|
||||
array('/{bar}', array('bar' => 'bar'), array('bar' => '(foo|bar)')),
|
||||
'', '#^/(?P<bar>(foo|bar))?$#s', array('bar'), array(
|
||||
array('variable', '/', '(foo|bar)', 'bar'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'Route with only optional variables',
|
||||
|
@ -110,7 +119,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||
'', '#^/(?P<foo>[^/]++)?(?:/(?P<bar>[^/]++))?$#s', array('foo', 'bar'), array(
|
||||
array('variable', '/', '[^/]++', 'bar'),
|
||||
array('variable', '/', '[^/]++', 'foo'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'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(
|
||||
array('variable', '-', '[^/]++', 'bar'),
|
||||
array('text', '/foo'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'Route with nested placeholders',
|
||||
|
@ -127,7 +138,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||
array('text', 'static}'),
|
||||
array('variable', '', '[^/]+', 'var'),
|
||||
array('text', '/{static'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'Route without separator between variables',
|
||||
|
@ -138,7 +150,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||
array('variable', '', '(y|Y)', 'y'),
|
||||
array('variable', '', '[^/\.]+', 'x'),
|
||||
array('variable', '/', '[^/\.]+', 'w'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
|
||||
array(
|
||||
'Route with a format',
|
||||
|
@ -147,7 +160,8 @@ class RouteCompilerTest extends \PHPUnit_Framework_TestCase
|
|||
array('variable', '.', '[^/]++', '_format'),
|
||||
array('variable', '/', '[^/\.]++', 'bar'),
|
||||
array('text', '/foo'),
|
||||
),),
|
||||
),
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
|
|
|
@ -105,5 +105,4 @@ class LdapUserProvider implements UserProviderInterface
|
|||
{
|
||||
return $class === 'Symfony\Component\Security\Core\User\User';
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -249,7 +249,6 @@ class Serializer implements SerializerInterface, NormalizerInterface, Denormaliz
|
|||
foreach ($this->normalizers as $normalizer) {
|
||||
if ($normalizer instanceof DenormalizerInterface
|
||||
&& $normalizer->supportsDenormalization($data, $class, $format)) {
|
||||
|
||||
return $normalizer->denormalize($data, $class, $format, $context);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -439,4 +439,3 @@ class StaticPropertyDummy
|
|||
{
|
||||
private static $property = 'value';
|
||||
}
|
||||
|
||||
|
|
|
@ -79,5 +79,4 @@ class TargetOperationTest extends AbstractOperationTest
|
|||
{
|
||||
return new TargetOperation($source, $target);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -33,13 +33,13 @@ class Escaper
|
|||
"\x08", "\x09", "\x0a", "\x0b", "\x0c", "\x0d", "\x0e", "\x0f",
|
||||
"\x10", "\x11", "\x12", "\x13", "\x14", "\x15", "\x16", "\x17",
|
||||
"\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('\\\\', '\\"', '\\\\', '\\"',
|
||||
'\\0', '\\x01', '\\x02', '\\x03', '\\x04', '\\x05', '\\x06', '\\a',
|
||||
'\\b', '\\t', '\\n', '\\v', '\\f', '\\r', '\\x0e', '\\x0f',
|
||||
'\\x10', '\\x11', '\\x12', '\\x13', '\\x14', '\\x15', '\\x16', '\\x17',
|
||||
'\\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.
|
||||
|
|
|
@ -26,7 +26,7 @@ class Unescaper
|
|||
/**
|
||||
* 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.
|
||||
|
|
Reference in New Issue