Merge branch '4.4'
* 4.4: [PhpUnitBridge] Bump PHPUnit 7+8 Prepare for PHP 7.4 preload prevent double deprecation message [Validator] Deprecate unused arg in ExpressionValidator [Config] Introduce find method in ArrayNodeDefinition to ease configuration tree manipulation [DomCrawler][Feature][DX] Add Form::getName() method [VarDumper] caster for HttpClient's response dumps all info
This commit is contained in:
commit
ac7d168ffa
|
@ -85,3 +85,9 @@ TwigBridge
|
|||
|
||||
* Deprecated to pass `$rootDir` and `$fileLinkFormatter` as 5th and 6th argument respectively to the
|
||||
`DebugCommand::__construct()` method, swap the variables position.
|
||||
|
||||
Validator
|
||||
---------
|
||||
|
||||
* Deprecated passing an `ExpressionLanguage` instance as the second argument of `ExpressionValidator::__construct()`.
|
||||
Pass it as the first argument instead.
|
||||
|
|
|
@ -475,6 +475,7 @@ TwigBridge
|
|||
Validator
|
||||
--------
|
||||
|
||||
* An `ExpressionLanguage` instance or null must be passed as the first argument of `ExpressionValidator::__construct()`
|
||||
* The `checkMX` and `checkHost` options of the `Email` constraint were removed
|
||||
* The `Email::__construct()` 'strict' property has been removed. Use 'mode'=>"strict" instead.
|
||||
* Calling `EmailValidator::__construct()` method with a boolean parameter has been removed, use `EmailValidator("strict")` instead.
|
||||
|
|
|
@ -47,9 +47,12 @@ $getEnvVar = function ($name, $default = false) {
|
|||
return $default;
|
||||
};
|
||||
|
||||
if (PHP_VERSION_ID >= 70100) {
|
||||
if (PHP_VERSION_ID >= 70200) {
|
||||
// PHPUnit 8 requires PHP 7.2+
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '8.2');
|
||||
} elseif (PHP_VERSION_ID >= 70100) {
|
||||
// PHPUnit 7 requires PHP 7.1+
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '7.4');
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '7.5');
|
||||
} elseif (PHP_VERSION_ID >= 70000) {
|
||||
// PHPUnit 6 requires PHP 7.0+
|
||||
$PHPUNIT_VERSION = $getEnvVar('SYMFONY_PHPUNIT_VERSION', '6.5');
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Cache\Exception;
|
||||
|
||||
use Psr\Cache\CacheException as Psr6CacheInterface;
|
||||
use Psr\SimpleCache\CacheException as SimpleCacheInterface;
|
||||
|
||||
class CacheException extends \Exception implements Psr6CacheInterface, SimpleCacheInterface
|
||||
{
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Cache\Exception;
|
||||
|
||||
use Psr\Cache\CacheException as Psr6CacheInterface;
|
||||
|
||||
class CacheException extends \Exception implements Psr6CacheInterface
|
||||
{
|
||||
}
|
|
@ -11,15 +11,10 @@
|
|||
|
||||
namespace Symfony\Component\Cache\Exception;
|
||||
|
||||
use Psr\Cache\CacheException as Psr6CacheInterface;
|
||||
use Psr\SimpleCache\CacheException as SimpleCacheInterface;
|
||||
|
||||
if (interface_exists(SimpleCacheInterface::class)) {
|
||||
class CacheException extends \Exception implements Psr6CacheInterface, SimpleCacheInterface
|
||||
{
|
||||
}
|
||||
require __DIR__.\DIRECTORY_SEPARATOR.'CacheException+psr16.php';
|
||||
} else {
|
||||
class CacheException extends \Exception implements Psr6CacheInterface
|
||||
{
|
||||
}
|
||||
require __DIR__.\DIRECTORY_SEPARATOR.'CacheException-psr16.php';
|
||||
}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Cache\Exception;
|
||||
|
||||
use Psr\Cache\InvalidArgumentException as Psr6CacheInterface;
|
||||
use Psr\SimpleCache\InvalidArgumentException as SimpleCacheInterface;
|
||||
|
||||
class InvalidArgumentException extends \InvalidArgumentException implements Psr6CacheInterface, SimpleCacheInterface
|
||||
{
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Cache\Exception;
|
||||
|
||||
use Psr\Cache\InvalidArgumentException as Psr6CacheInterface;
|
||||
|
||||
class InvalidArgumentException extends \InvalidArgumentException implements Psr6CacheInterface
|
||||
{
|
||||
}
|
|
@ -11,15 +11,10 @@
|
|||
|
||||
namespace Symfony\Component\Cache\Exception;
|
||||
|
||||
use Psr\Cache\InvalidArgumentException as Psr6CacheInterface;
|
||||
use Psr\SimpleCache\InvalidArgumentException as SimpleCacheInterface;
|
||||
|
||||
if (interface_exists(SimpleCacheInterface::class)) {
|
||||
class InvalidArgumentException extends \InvalidArgumentException implements Psr6CacheInterface, SimpleCacheInterface
|
||||
{
|
||||
}
|
||||
require __DIR__.\DIRECTORY_SEPARATOR.'InvalidArgumentException+psr16.php';
|
||||
} else {
|
||||
class InvalidArgumentException extends \InvalidArgumentException implements Psr6CacheInterface
|
||||
{
|
||||
}
|
||||
require __DIR__.\DIRECTORY_SEPARATOR.'InvalidArgumentException-psr16.php';
|
||||
}
|
||||
|
|
|
@ -0,0 +1,19 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Cache\Exception;
|
||||
|
||||
use Psr\Cache\CacheException as Psr6CacheInterface;
|
||||
use Psr\SimpleCache\CacheException as SimpleCacheInterface;
|
||||
|
||||
class LogicException extends \LogicException implements Psr6CacheInterface, SimpleCacheInterface
|
||||
{
|
||||
}
|
|
@ -0,0 +1,18 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Component\Cache\Exception;
|
||||
|
||||
use Psr\Cache\CacheException as Psr6CacheInterface;
|
||||
|
||||
class LogicException extends \LogicException implements Psr6CacheInterface
|
||||
{
|
||||
}
|
|
@ -11,15 +11,10 @@
|
|||
|
||||
namespace Symfony\Component\Cache\Exception;
|
||||
|
||||
use Psr\Cache\CacheException as Psr6CacheInterface;
|
||||
use Psr\SimpleCache\CacheException as SimpleCacheInterface;
|
||||
use Psr\SimpleCache\LogicException as SimpleCacheInterface;
|
||||
|
||||
if (interface_exists(SimpleCacheInterface::class)) {
|
||||
class LogicException extends \LogicException implements Psr6CacheInterface, SimpleCacheInterface
|
||||
{
|
||||
}
|
||||
require __DIR__.\DIRECTORY_SEPARATOR.'LogicException-psr16.php';
|
||||
} else {
|
||||
class LogicException extends \LogicException implements Psr6CacheInterface
|
||||
{
|
||||
}
|
||||
require __DIR__.\DIRECTORY_SEPARATOR.'LogicException-psr16.php';
|
||||
}
|
||||
|
|
|
@ -523,4 +523,26 @@ class ArrayNodeDefinition extends NodeDefinition implements ParentNodeDefinition
|
|||
{
|
||||
return $this->children;
|
||||
}
|
||||
|
||||
/**
|
||||
* Finds a node defined by the given $nodePath.
|
||||
*
|
||||
* @param string $nodePath The path of the node to find. e.g "doctrine.orm.mappings"
|
||||
*/
|
||||
public function find(string $nodePath): NodeDefinition
|
||||
{
|
||||
$firstPathSegment = (false === $pathSeparatorPos = strpos($nodePath, $this->pathSeparator))
|
||||
? $nodePath
|
||||
: substr($nodePath, 0, $pathSeparatorPos);
|
||||
|
||||
if (null === $node = ($this->children[$firstPathSegment] ?? null)) {
|
||||
throw new \RuntimeException(sprintf('Node with name "%s" does not exist in the current node "%s".', $firstPathSegment, $this->name));
|
||||
}
|
||||
|
||||
if (false === $pathSeparatorPos) {
|
||||
return $node;
|
||||
}
|
||||
|
||||
return $node->find(substr($nodePath, $pathSeparatorPos + \strlen($this->pathSeparator)));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -13,6 +13,8 @@ namespace Symfony\Component\Config\Tests\Definition\Builder;
|
|||
|
||||
use PHPUnit\Framework\TestCase;
|
||||
use Symfony\Component\Config\Definition\Builder\ArrayNodeDefinition;
|
||||
use Symfony\Component\Config\Definition\Builder\BooleanNodeDefinition;
|
||||
use Symfony\Component\Config\Definition\Builder\NodeDefinition;
|
||||
use Symfony\Component\Config\Definition\Builder\ScalarNodeDefinition;
|
||||
use Symfony\Component\Config\Definition\Exception\InvalidDefinitionException;
|
||||
use Symfony\Component\Config\Definition\Processor;
|
||||
|
@ -357,6 +359,85 @@ class ArrayNodeDefinitionTest extends TestCase
|
|||
$node->getNode()->finalize([]);
|
||||
}
|
||||
|
||||
public function testFindShouldThrowExceptionIfNodeDoesNotExistInRootNode()
|
||||
{
|
||||
$this->expectException(\RuntimeException::class);
|
||||
$this->expectExceptionMessage('Node with name "child" does not exist in the current node "root".');
|
||||
|
||||
$rootNode = new ArrayNodeDefinition('root');
|
||||
$rootNode
|
||||
->children()
|
||||
->arrayNode('social_media_channels')->end()
|
||||
->end()
|
||||
;
|
||||
|
||||
$rootNode->find('child');
|
||||
}
|
||||
|
||||
public function testFindShouldHandleComplexConfigurationProperly()
|
||||
{
|
||||
$rootNode = new ArrayNodeDefinition('root');
|
||||
$rootNode
|
||||
->children()
|
||||
->arrayNode('social_media_channels')
|
||||
->children()
|
||||
->booleanNode('enable')->end()
|
||||
->arrayNode('twitter')->end()
|
||||
->arrayNode('facebook')->end()
|
||||
->arrayNode('instagram')
|
||||
->children()
|
||||
->booleanNode('enable')->end()
|
||||
->arrayNode('accounts')->end()
|
||||
->end()
|
||||
->end()
|
||||
->end()
|
||||
->append(
|
||||
$mailerNode = (new ArrayNodeDefinition('mailer'))
|
||||
->children()
|
||||
->booleanNode('enable')->end()
|
||||
->arrayNode('transports')->end()
|
||||
->end()
|
||||
)
|
||||
->end()
|
||||
;
|
||||
|
||||
$this->assertNode('social_media_channels', ArrayNodeDefinition::class, $rootNode->find('social_media_channels'));
|
||||
$this->assertNode('enable', BooleanNodeDefinition::class, $rootNode->find('social_media_channels.enable'));
|
||||
$this->assertNode('twitter', ArrayNodeDefinition::class, $rootNode->find('social_media_channels.twitter'));
|
||||
$this->assertNode('facebook', ArrayNodeDefinition::class, $rootNode->find('social_media_channels.facebook'));
|
||||
$this->assertNode('instagram', ArrayNodeDefinition::class, $rootNode->find('social_media_channels.instagram'));
|
||||
$this->assertNode('enable', BooleanNodeDefinition::class, $rootNode->find('social_media_channels.instagram.enable'));
|
||||
$this->assertNode('accounts', ArrayNodeDefinition::class, $rootNode->find('social_media_channels.instagram.accounts'));
|
||||
|
||||
$this->assertNode('enable', BooleanNodeDefinition::class, $mailerNode->find('enable'));
|
||||
$this->assertNode('transports', ArrayNodeDefinition::class, $mailerNode->find('transports'));
|
||||
}
|
||||
|
||||
public function testFindShouldWorkProperlyForNonDefaultPathSeparator()
|
||||
{
|
||||
$rootNode = new ArrayNodeDefinition('root');
|
||||
$rootNode
|
||||
->setPathSeparator('.|')
|
||||
->children()
|
||||
->arrayNode('mailer.configuration')
|
||||
->children()
|
||||
->booleanNode('enable')->end()
|
||||
->arrayNode('transports')->end()
|
||||
->end()
|
||||
->end()
|
||||
;
|
||||
|
||||
$this->assertNode('mailer.configuration', ArrayNodeDefinition::class, $rootNode->find('mailer.configuration'));
|
||||
$this->assertNode('enable', BooleanNodeDefinition::class, $rootNode->find('mailer.configuration.|enable'));
|
||||
$this->assertNode('transports', ArrayNodeDefinition::class, $rootNode->find('mailer.configuration.|transports'));
|
||||
}
|
||||
|
||||
protected function assertNode(string $expectedName, string $expectedType, NodeDefinition $actualNode): void
|
||||
{
|
||||
$this->assertInstanceOf($expectedType, $actualNode);
|
||||
$this->assertSame($expectedName, $this->getField($actualNode, 'name'));
|
||||
}
|
||||
|
||||
protected function getField($object, $field)
|
||||
{
|
||||
$reflection = new \ReflectionProperty($object, $field);
|
||||
|
|
|
@ -7,6 +7,11 @@ CHANGELOG
|
|||
* Added argument `$selector` to ``Crawler::children()`
|
||||
* Added argument `$default` to ``Crawler::text()` and `html()`
|
||||
|
||||
4.4.0
|
||||
-----
|
||||
|
||||
* Added `Form::getName()` method.
|
||||
|
||||
4.3.0
|
||||
-----
|
||||
|
||||
|
|
|
@ -250,6 +250,16 @@ class Form extends Link implements \ArrayAccess
|
|||
return $this->node->getAttribute('method') ? strtoupper($this->node->getAttribute('method')) : 'GET';
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets the form name.
|
||||
*
|
||||
* If no name is defined on the form, an empty string is returned.
|
||||
*/
|
||||
public function getName(): string
|
||||
{
|
||||
return $this->node->getAttribute('name');
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns true if the named field exists.
|
||||
*
|
||||
|
|
|
@ -327,6 +327,18 @@ class FormTest extends TestCase
|
|||
$this->assertEquals('POST', $form->getMethod(), '->getMethod() returns the method attribute value of the form');
|
||||
}
|
||||
|
||||
public function testGetName()
|
||||
{
|
||||
$form = $this->createForm('<form name="foo"><input type="submit" /></form>');
|
||||
$this->assertSame('foo', $form->getName());
|
||||
}
|
||||
|
||||
public function testGetNameOnFormWithoutName()
|
||||
{
|
||||
$form = $this->createForm('<form><input type="submit" /></form>');
|
||||
$this->assertSame('', $form->getName());
|
||||
}
|
||||
|
||||
public function testGetSetValue()
|
||||
{
|
||||
$form = $this->createForm('<form><input type="text" name="foo" value="foo" /><input type="submit" /></form>');
|
||||
|
|
|
@ -16,6 +16,7 @@ CHANGELOG
|
|||
4.4.0
|
||||
-----
|
||||
|
||||
* deprecated passing an `ExpressionLanguage` instance as the second argument of `ExpressionValidator::__construct()`. Pass it as the first argument instead.
|
||||
* added the `compared_value_path` parameter in violations when using any
|
||||
comparison constraint with the `propertyPath` option.
|
||||
* added support for checking an array of types in `TypeValidator`
|
||||
|
|
|
@ -24,8 +24,20 @@ class ExpressionValidator extends ConstraintValidator
|
|||
{
|
||||
private $expressionLanguage;
|
||||
|
||||
public function __construct($propertyAccessor = null, ExpressionLanguage $expressionLanguage = null)
|
||||
public function __construct(/*ExpressionLanguage */$expressionLanguage = null)
|
||||
{
|
||||
if (\func_num_args() > 1) {
|
||||
@trigger_error(sprintf('The "%s" instance should be passed as "%s" first argument instead of second argument since 4.4.', ExpressionLanguage::class, __METHOD__), E_USER_DEPRECATED);
|
||||
|
||||
$expressionLanguage = func_get_arg(1);
|
||||
|
||||
if (null !== $expressionLanguage && !$expressionLanguage instanceof ExpressionLanguage) {
|
||||
throw new \TypeError(sprintf('Argument 2 passed to %s() must be an instance of %s or null, %s given. Since 4.4, passing it as the second argument is deprecated and will trigger a deprecation. Pass it as the first argument instead.', __METHOD__, ExpressionLanguage::class, \is_object($expressionLanguage) ? \get_class($expressionLanguage) : \gettype($expressionLanguage)));
|
||||
}
|
||||
} elseif (null !== $expressionLanguage && !$expressionLanguage instanceof ExpressionLanguage) {
|
||||
@trigger_error(sprintf('The "%s" first argument must be an instance of "%s" or null since 4.4. "%s" given', __METHOD__, ExpressionLanguage::class, \is_object($expressionLanguage) ? \get_class($expressionLanguage) : \gettype($expressionLanguage)), E_USER_DEPRECATED);
|
||||
}
|
||||
|
||||
$this->expressionLanguage = $expressionLanguage;
|
||||
}
|
||||
|
||||
|
|
|
@ -11,6 +11,7 @@
|
|||
|
||||
namespace Symfony\Component\Validator\Tests\Constraints;
|
||||
|
||||
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
|
||||
use Symfony\Component\Validator\Constraints\Expression;
|
||||
use Symfony\Component\Validator\Constraints\ExpressionValidator;
|
||||
use Symfony\Component\Validator\Test\ConstraintValidatorTestCase;
|
||||
|
@ -253,6 +254,34 @@ class ExpressionValidatorTest extends ConstraintValidatorTestCase
|
|||
'expression' => 'false',
|
||||
]);
|
||||
|
||||
$expressionLanguage = $this->getMockBuilder(ExpressionLanguage::class)->getMock();
|
||||
|
||||
$used = false;
|
||||
|
||||
$expressionLanguage->method('evaluate')
|
||||
->willReturnCallback(function () use (&$used) {
|
||||
$used = true;
|
||||
|
||||
return true;
|
||||
});
|
||||
|
||||
$validator = new ExpressionValidator($expressionLanguage);
|
||||
$validator->initialize($this->createContext());
|
||||
$validator->validate(null, $constraint);
|
||||
|
||||
$this->assertTrue($used, 'Failed asserting that custom ExpressionLanguage instance is used.');
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
* @expectedDeprecation The "Symfony\Component\ExpressionLanguage\ExpressionLanguage" instance should be passed as "Symfony\Component\Validator\Constraints\ExpressionValidator::__construct" first argument instead of second argument since 4.4.
|
||||
*/
|
||||
public function testLegacyExpressionLanguageUsage()
|
||||
{
|
||||
$constraint = new Expression([
|
||||
'expression' => 'false',
|
||||
]);
|
||||
|
||||
$expressionLanguage = $this->getMockBuilder('Symfony\Component\ExpressionLanguage\ExpressionLanguage')->getMock();
|
||||
|
||||
$used = false;
|
||||
|
@ -271,6 +300,15 @@ class ExpressionValidatorTest extends ConstraintValidatorTestCase
|
|||
$this->assertTrue($used, 'Failed asserting that custom ExpressionLanguage instance is used.');
|
||||
}
|
||||
|
||||
/**
|
||||
* @group legacy
|
||||
* @expectedDeprecation The "Symfony\Component\Validator\Constraints\ExpressionValidator::__construct" first argument must be an instance of "Symfony\Component\ExpressionLanguage\ExpressionLanguage" or null since 4.4. "string" given
|
||||
*/
|
||||
public function testConstructorInvalidType()
|
||||
{
|
||||
new ExpressionValidator('foo');
|
||||
}
|
||||
|
||||
public function testPassingCustomValues()
|
||||
{
|
||||
$constraint = new Expression([
|
||||
|
|
|
@ -48,4 +48,16 @@ class SymfonyCaster
|
|||
|
||||
return $a;
|
||||
}
|
||||
|
||||
public static function castHttpClientResponse($response, array $a, Stub $stub, $isNested)
|
||||
{
|
||||
$stub->cut += \count($a);
|
||||
$a = [];
|
||||
|
||||
foreach ($response->getInfo() + ['debug' => $response->getInfo('debug')] as $k => $v) {
|
||||
$a[Caster::PREFIX_VIRTUAL.$k] = $v;
|
||||
}
|
||||
|
||||
return $a;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -78,8 +78,8 @@ abstract class AbstractCloner implements ClonerInterface
|
|||
'Symfony\Component\DependencyInjection\ContainerInterface' => ['Symfony\Component\VarDumper\Caster\StubCaster', 'cutInternals'],
|
||||
'Symfony\Component\HttpClient\CurlHttpClient' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClient'],
|
||||
'Symfony\Component\HttpClient\NativeHttpClient' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClient'],
|
||||
'Symfony\Component\HttpClient\Response\CurlResponse' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClient'],
|
||||
'Symfony\Component\HttpClient\Response\NativeResponse' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClient'],
|
||||
'Symfony\Component\HttpClient\Response\CurlResponse' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClientResponse'],
|
||||
'Symfony\Component\HttpClient\Response\NativeResponse' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castHttpClientResponse'],
|
||||
'Symfony\Component\HttpFoundation\Request' => ['Symfony\Component\VarDumper\Caster\SymfonyCaster', 'castRequest'],
|
||||
'Symfony\Component\VarDumper\Exception\ThrowingCasterException' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castThrowingCasterException'],
|
||||
'Symfony\Component\VarDumper\Caster\TraceStub' => ['Symfony\Component\VarDumper\Caster\ExceptionCaster', 'castTraceStub'],
|
||||
|
|
|
@ -0,0 +1,54 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Contracts\EventDispatcher;
|
||||
|
||||
use Psr\EventDispatcher\StoppableEventInterface;
|
||||
|
||||
/**
|
||||
* Event is the base class for classes containing event data.
|
||||
*
|
||||
* This class contains no event data. It is used by events that do not pass
|
||||
* state information to an event handler when an event is raised.
|
||||
*
|
||||
* You can call the method stopPropagation() to abort the execution of
|
||||
* further listeners in your event listener.
|
||||
*
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*/
|
||||
class Event implements StoppableEventInterface
|
||||
{
|
||||
private $propagationStopped = false;
|
||||
|
||||
/**
|
||||
* Returns whether further event listeners should be triggered.
|
||||
*/
|
||||
public function isPropagationStopped(): bool
|
||||
{
|
||||
return $this->propagationStopped;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the propagation of the event to further event listeners.
|
||||
*
|
||||
* If multiple event listeners are connected to the same event, no
|
||||
* further event listener will be triggered once any trigger calls
|
||||
* stopPropagation().
|
||||
*/
|
||||
public function stopPropagation(): void
|
||||
{
|
||||
$this->propagationStopped = true;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,52 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Contracts\EventDispatcher;
|
||||
|
||||
/**
|
||||
* Event is the base class for classes containing event data.
|
||||
*
|
||||
* This class contains no event data. It is used by events that do not pass
|
||||
* state information to an event handler when an event is raised.
|
||||
*
|
||||
* You can call the method stopPropagation() to abort the execution of
|
||||
* further listeners in your event listener.
|
||||
*
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*/
|
||||
class Event
|
||||
{
|
||||
private $propagationStopped = false;
|
||||
|
||||
/**
|
||||
* Returns whether further event listeners should be triggered.
|
||||
*/
|
||||
public function isPropagationStopped(): bool
|
||||
{
|
||||
return $this->propagationStopped;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the propagation of the event to further event listeners.
|
||||
*
|
||||
* If multiple event listeners are connected to the same event, no
|
||||
* further event listener will be triggered once any trigger calls
|
||||
* stopPropagation().
|
||||
*/
|
||||
public function stopPropagation(): void
|
||||
{
|
||||
$this->propagationStopped = true;
|
||||
}
|
||||
}
|
|
@ -14,83 +14,7 @@ namespace Symfony\Contracts\EventDispatcher;
|
|||
use Psr\EventDispatcher\StoppableEventInterface;
|
||||
|
||||
if (interface_exists(StoppableEventInterface::class)) {
|
||||
/**
|
||||
* Event is the base class for classes containing event data.
|
||||
*
|
||||
* This class contains no event data. It is used by events that do not pass
|
||||
* state information to an event handler when an event is raised.
|
||||
*
|
||||
* You can call the method stopPropagation() to abort the execution of
|
||||
* further listeners in your event listener.
|
||||
*
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*/
|
||||
class Event implements StoppableEventInterface
|
||||
{
|
||||
private $propagationStopped = false;
|
||||
|
||||
/**
|
||||
* Returns whether further event listeners should be triggered.
|
||||
*/
|
||||
public function isPropagationStopped(): bool
|
||||
{
|
||||
return $this->propagationStopped;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the propagation of the event to further event listeners.
|
||||
*
|
||||
* If multiple event listeners are connected to the same event, no
|
||||
* further event listener will be triggered once any trigger calls
|
||||
* stopPropagation().
|
||||
*/
|
||||
public function stopPropagation(): void
|
||||
{
|
||||
$this->propagationStopped = true;
|
||||
}
|
||||
}
|
||||
require __DIR__.\DIRECTORY_SEPARATOR.'Event+psr14.php';
|
||||
} else {
|
||||
/**
|
||||
* Event is the base class for classes containing event data.
|
||||
*
|
||||
* This class contains no event data. It is used by events that do not pass
|
||||
* state information to an event handler when an event is raised.
|
||||
*
|
||||
* You can call the method stopPropagation() to abort the execution of
|
||||
* further listeners in your event listener.
|
||||
*
|
||||
* @author Guilherme Blanco <guilhermeblanco@hotmail.com>
|
||||
* @author Jonathan Wage <jonwage@gmail.com>
|
||||
* @author Roman Borschel <roman@code-factory.org>
|
||||
* @author Bernhard Schussek <bschussek@gmail.com>
|
||||
* @author Nicolas Grekas <p@tchwork.com>
|
||||
*/
|
||||
class Event
|
||||
{
|
||||
private $propagationStopped = false;
|
||||
|
||||
/**
|
||||
* Returns whether further event listeners should be triggered.
|
||||
*/
|
||||
public function isPropagationStopped(): bool
|
||||
{
|
||||
return $this->propagationStopped;
|
||||
}
|
||||
|
||||
/**
|
||||
* Stops the propagation of the event to further event listeners.
|
||||
*
|
||||
* If multiple event listeners are connected to the same event, no
|
||||
* further event listener will be triggered once any trigger calls
|
||||
* stopPropagation().
|
||||
*/
|
||||
public function stopPropagation(): void
|
||||
{
|
||||
$this->propagationStopped = true;
|
||||
}
|
||||
}
|
||||
require __DIR__.\DIRECTORY_SEPARATOR.'Event-psr14.php';
|
||||
}
|
||||
|
|
|
@ -0,0 +1,35 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Contracts\EventDispatcher;
|
||||
|
||||
use Psr\EventDispatcher\EventDispatcherInterface as PsrEventDispatcherInterface;
|
||||
|
||||
/**
|
||||
* Allows providing hooks on domain-specific lifecycles by dispatching events.
|
||||
*/
|
||||
interface EventDispatcherInterface extends PsrEventDispatcherInterface
|
||||
{
|
||||
/**
|
||||
* Dispatches an event to all registered listeners.
|
||||
*
|
||||
* For BC with Symfony 4, the $eventName argument is not declared explicitly on the
|
||||
* signature of the method. Implementations that are not bound by this BC constraint
|
||||
* MUST declare it explicitly, as allowed by PHP.
|
||||
*
|
||||
* @param object $event The event to pass to the event handlers/listeners
|
||||
* @param string|null $eventName The name of the event to dispatch. If not supplied,
|
||||
* the class of $event should be used instead.
|
||||
*
|
||||
* @return object The passed $event MUST be returned
|
||||
*/
|
||||
public function dispatch($event/*, string $eventName = null*/);
|
||||
}
|
|
@ -0,0 +1,33 @@
|
|||
<?php
|
||||
|
||||
/*
|
||||
* This file is part of the Symfony package.
|
||||
*
|
||||
* (c) Fabien Potencier <fabien@symfony.com>
|
||||
*
|
||||
* For the full copyright and license information, please view the LICENSE
|
||||
* file that was distributed with this source code.
|
||||
*/
|
||||
|
||||
namespace Symfony\Contracts\EventDispatcher;
|
||||
|
||||
/**
|
||||
* Allows providing hooks on domain-specific lifecycles by dispatching events.
|
||||
*/
|
||||
interface EventDispatcherInterface
|
||||
{
|
||||
/**
|
||||
* Dispatches an event to all registered listeners.
|
||||
*
|
||||
* For BC with Symfony 4, the $eventName argument is not declared explicitly on the
|
||||
* signature of the method. Implementations that are not bound by this BC constraint
|
||||
* MUST declare it explicitly, as allowed by PHP.
|
||||
*
|
||||
* @param object $event The event to pass to the event handlers/listeners
|
||||
* @param string|null $eventName The name of the event to dispatch. If not supplied,
|
||||
* the class of $event should be used instead.
|
||||
*
|
||||
* @return object The passed $event MUST be returned
|
||||
*/
|
||||
public function dispatch($event/*, string $eventName = null*/);
|
||||
}
|
|
@ -14,45 +14,7 @@ namespace Symfony\Contracts\EventDispatcher;
|
|||
use Psr\EventDispatcher\EventDispatcherInterface as PsrEventDispatcherInterface;
|
||||
|
||||
if (interface_exists(PsrEventDispatcherInterface::class)) {
|
||||
/**
|
||||
* Allows providing hooks on domain-specific lifecycles by dispatching events.
|
||||
*/
|
||||
interface EventDispatcherInterface extends PsrEventDispatcherInterface
|
||||
{
|
||||
/**
|
||||
* Dispatches an event to all registered listeners.
|
||||
*
|
||||
* For BC with Symfony 4, the $eventName argument is not declared explicitly on the
|
||||
* signature of the method. Implementations that are not bound by this BC constraint
|
||||
* MUST declare it explicitly, as allowed by PHP.
|
||||
*
|
||||
* @param object $event The event to pass to the event handlers/listeners
|
||||
* @param string|null $eventName The name of the event to dispatch. If not supplied,
|
||||
* the class of $event should be used instead.
|
||||
*
|
||||
* @return object The passed $event MUST be returned
|
||||
*/
|
||||
public function dispatch($event/*, string $eventName = null*/);
|
||||
}
|
||||
require __DIR__.\DIRECTORY_SEPARATOR.'EventDispatcherInterface+psr14.php';
|
||||
} else {
|
||||
/**
|
||||
* Allows providing hooks on domain-specific lifecycles by dispatching events.
|
||||
*/
|
||||
interface EventDispatcherInterface
|
||||
{
|
||||
/**
|
||||
* Dispatches an event to all registered listeners.
|
||||
*
|
||||
* For BC with Symfony 4, the $eventName argument is not declared explicitly on the
|
||||
* signature of the method. Implementations that are not bound by this BC constraint
|
||||
* MUST declare it explicitly, as allowed by PHP.
|
||||
*
|
||||
* @param object $event The event to pass to the event handlers/listeners
|
||||
* @param string|null $eventName The name of the event to dispatch. If not supplied,
|
||||
* the class of $event should be used instead.
|
||||
*
|
||||
* @return object The passed $event MUST be returned
|
||||
*/
|
||||
public function dispatch($event/*, string $eventName = null*/);
|
||||
}
|
||||
require __DIR__.\DIRECTORY_SEPARATOR.'EventDispatcherInterface-psr14.php';
|
||||
}
|
||||
|
|
Reference in New Issue