Merge branch '3.4' into 4.2

* 3.4:
  [HttpFoundation] Throw exception when the \"session\" extension is not loaded
  remove invalid test cases
  [Serializer] Fixed PHP of DenormalizableInterface::denormalize
  [Finder] docblock fixes
  pass error code as a string
  Catch JsonException and rethrow in JsonEncode
This commit is contained in:
Nicolas Grekas 2019-06-28 14:55:49 +02:00
commit b8c4809a49
9 changed files with 26 additions and 23 deletions

View File

@ -210,6 +210,10 @@ class FrameworkExtension extends Extension
} }
if ($this->isConfigEnabled($container, $config['session'])) { if ($this->isConfigEnabled($container, $config['session'])) {
if (!\extension_loaded('session')) {
throw new \LogicException('PHP extension "session" is required.');
}
$this->sessionConfigEnabled = true; $this->sessionConfigEnabled = true;
$this->registerSessionConfiguration($config['session'], $container, $loader); $this->registerSessionConfiguration($config['session'], $container, $loader);
if (!empty($config['test'])) { if (!empty($config['test'])) {

View File

@ -562,7 +562,7 @@ class Finder implements \IteratorAggregate, \Countable
/** /**
* Searches files and directories which match defined rules. * Searches files and directories which match defined rules.
* *
* @param string|array $dirs A directory path or an array of directories * @param string|string[] $dirs A directory path or an array of directories
* *
* @return $this * @return $this
* *

View File

@ -25,7 +25,7 @@ class ExcludeDirectoryFilterIterator extends \FilterIterator implements \Recursi
/** /**
* @param \Iterator $iterator The Iterator to filter * @param \Iterator $iterator The Iterator to filter
* @param array $directories An array of directories to exclude * @param string[] $directories An array of directories to exclude
*/ */
public function __construct(\Iterator $iterator, array $directories) public function __construct(\Iterator $iterator, array $directories)
{ {

View File

@ -103,6 +103,10 @@ class NativeSessionStorage implements SessionStorageInterface
*/ */
public function __construct(array $options = [], $handler = null, MetadataBag $metaBag = null) public function __construct(array $options = [], $handler = null, MetadataBag $metaBag = null)
{ {
if (!\extension_loaded('session')) {
throw new \LogicException('PHP extension "session" is required.');
}
$options += [ $options += [
'cache_limiter' => '', 'cache_limiter' => '',
'cache_expire' => 0, 'cache_expire' => 0,

View File

@ -24,6 +24,10 @@ class PhpBridgeSessionStorage extends NativeSessionStorage
*/ */
public function __construct($handler = null, MetadataBag $metaBag = null) public function __construct($handler = null, MetadataBag $metaBag = null)
{ {
if (!\extension_loaded('session')) {
throw new \LogicException('PHP extension "session" is required.');
}
$this->setMetadataBag($metaBag); $this->setMetadataBag($metaBag);
$this->setSaveHandler($handler); $this->setSaveHandler($handler);
} }

View File

@ -47,14 +47,19 @@ class JsonEncode implements EncoderInterface
*/ */
public function encode($data, $format, array $context = []) public function encode($data, $format, array $context = [])
{ {
$jsonEncodeOptions = $context[self::OPTIONS] ?? $this->defaultContext[self::OPTIONS]; $options = $context[self::OPTIONS] ?? $this->defaultContext[self::OPTIONS];
$encodedJson = json_encode($data, $jsonEncodeOptions);
if (\PHP_VERSION_ID >= 70300 && (JSON_THROW_ON_ERROR & $jsonEncodeOptions)) { try {
$encodedJson = json_encode($data, $options);
} catch (\JsonException $e) {
throw new NotEncodableValueException($e->getMessage(), 0, $e);
}
if (\PHP_VERSION_ID >= 70300 && (JSON_THROW_ON_ERROR & $options)) {
return $encodedJson; return $encodedJson;
} }
if (JSON_ERROR_NONE !== json_last_error() && (false === $encodedJson || !($jsonEncodeOptions & JSON_PARTIAL_OUTPUT_ON_ERROR))) { if (JSON_ERROR_NONE !== json_last_error() && (false === $encodedJson || !($options & JSON_PARTIAL_OUTPUT_ON_ERROR))) {
throw new NotEncodableValueException(json_last_error_msg()); throw new NotEncodableValueException(json_last_error_msg());
} }

View File

@ -34,7 +34,7 @@ interface DenormalizableInterface
* differently based on different input formats * differently based on different input formats
* @param array $context Options for denormalizing * @param array $context Options for denormalizing
* *
* @return object * @return object|object[]
*/ */
public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null, array $context = []); public function denormalize(DenormalizerInterface $denormalizer, $data, $format = null, array $context = []);
} }

View File

@ -148,20 +148,6 @@ abstract class AbstractComparisonValidatorTestCase extends ConstraintValidatorTe
$this->assertNoViolation(); $this->assertNoViolation();
} }
/**
* @dataProvider provideValidComparisonsToPropertyPath
*/
public function testValidComparisonToPropertyPathOnArray($comparedValue)
{
$constraint = $this->createConstraint(['propertyPath' => '[root][value]']);
$this->setObject(['root' => ['value' => 5]]);
$this->validator->validate($comparedValue, $constraint);
$this->assertNoViolation();
}
public function testNoViolationOnNullObjectWithPropertyPath() public function testNoViolationOnNullObjectWithPropertyPath()
{ {
$constraint = $this->createConstraint(['propertyPath' => 'propertyPath']); $constraint = $this->createConstraint(['propertyPath' => 'propertyPath']);

View File

@ -511,7 +511,7 @@ abstract class AbstractTest extends AbstractValidatorTest
->setParameter('%param%', 'value') ->setParameter('%param%', 'value')
->setInvalidValue('Invalid value') ->setInvalidValue('Invalid value')
->setPlural(2) ->setPlural(2)
->setCode(42) ->setCode('42')
->addViolation(); ->addViolation();
}; };
@ -528,7 +528,7 @@ abstract class AbstractTest extends AbstractValidatorTest
$this->assertSame($entity, $violations[0]->getRoot()); $this->assertSame($entity, $violations[0]->getRoot());
$this->assertSame('Invalid value', $violations[0]->getInvalidValue()); $this->assertSame('Invalid value', $violations[0]->getInvalidValue());
$this->assertSame(2, $violations[0]->getPlural()); $this->assertSame(2, $violations[0]->getPlural());
$this->assertSame(42, $violations[0]->getCode()); $this->assertSame('42', $violations[0]->getCode());
} }
public function testNoDuplicateValidationIfClassConstraintInMultipleGroups() public function testNoDuplicateValidationIfClassConstraintInMultipleGroups()