diff --git a/UPGRADE-5.2.md b/UPGRADE-5.2.md index 99747ca93c59d..78b3f9c16279e 100644 --- a/UPGRADE-5.2.md +++ b/UPGRADE-5.2.md @@ -48,6 +48,12 @@ Mime * Deprecated `Address::fromString()`, use `Address::create()` instead +Monolog +------- + + * The `$actionLevel` constructor argument of `Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy` has been deprecated and replaced by the `$inner` one which expects an ActivationStrategyInterface to decorate instead. `Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy` will become final in 6.0. + * The `$actionLevel` constructor argument of `Symfony\Bridge\Monolog\Handler\FingersCrossed\HttpCodeActivationStrategy` has been deprecated and replaced by the `$inner` one which expects an ActivationStrategyInterface to decorate instead. `Symfony\Bridge\Monolog\Handler\FingersCrossed\HttpCodeActivationStrategy` will become final in 6.0 + PropertyAccess -------------- diff --git a/UPGRADE-6.0.md b/UPGRADE-6.0.md index 43c1a910a3268..67f165256ba0b 100644 --- a/UPGRADE-6.0.md +++ b/UPGRADE-6.0.md @@ -98,6 +98,12 @@ Mime * Removed `Address::fromString()`, use `Address::create()` instead +Monolog +------- + + * The `$actionLevel` constructor argument of `Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy` has been replaced by the `$inner` one which expects an ActivationStrategyInterface to decorate instead. `Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy` is now final. + * The `$actionLevel` constructor argument of `Symfony\Bridge\Monolog\Handler\FingersCrossed\HttpCodeActivationStrategy` has been replaced by the `$inner` one which expects an ActivationStrategyInterface to decorate instead. `Symfony\Bridge\Monolog\Handler\FingersCrossed\HttpCodeActivationStrategy` is now final. + OptionsResolver --------------- diff --git a/src/Symfony/Bridge/Monolog/CHANGELOG.md b/src/Symfony/Bridge/Monolog/CHANGELOG.md index 2a4d31a2ab340..12cc86541d8c8 100644 --- a/src/Symfony/Bridge/Monolog/CHANGELOG.md +++ b/src/Symfony/Bridge/Monolog/CHANGELOG.md @@ -1,8 +1,15 @@ CHANGELOG ========= +5.2.0 +----- + + * The `$actionLevel` constructor argument of `Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy` has been deprecated and replaced by the `$inner` one which expects an ActivationStrategyInterface to decorate instead. `Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy` will become final in 6.0. + * The `$actionLevel` constructor argument of `Symfony\Bridge\Monolog\Handler\FingersCrossed\HttpCodeActivationStrategy` has been deprecated and replaced by the `$inner` one which expects an ActivationStrategyInterface to decorate instead. `Symfony\Bridge\Monolog\Handler\FingersCrossed\HttpCodeActivationStrategy` will become final in 6.0 + 5.1.0 ----- + * Added `MailerHandler` 5.0.0 diff --git a/src/Symfony/Bridge/Monolog/Handler/FingersCrossed/HttpCodeActivationStrategy.php b/src/Symfony/Bridge/Monolog/Handler/FingersCrossed/HttpCodeActivationStrategy.php index 410c99e53b030..5214717a09cca 100644 --- a/src/Symfony/Bridge/Monolog/Handler/FingersCrossed/HttpCodeActivationStrategy.php +++ b/src/Symfony/Bridge/Monolog/Handler/FingersCrossed/HttpCodeActivationStrategy.php @@ -11,6 +11,7 @@ namespace Symfony\Bridge\Monolog\Handler\FingersCrossed; +use Monolog\Handler\FingersCrossed\ActivationStrategyInterface; use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Exception\HttpException; @@ -19,17 +20,29 @@ * Activation strategy that ignores certain HTTP codes. * * @author Shaun Simmons + * @author Pierrick Vignand + * + * @final */ -class HttpCodeActivationStrategy extends ErrorLevelActivationStrategy +class HttpCodeActivationStrategy extends ErrorLevelActivationStrategy implements ActivationStrategyInterface { + private $inner; private $exclusions; private $requestStack; /** - * @param array $exclusions each exclusion must have a "code" and "urls" keys + * @param array $exclusions each exclusion must have a "code" and "urls" keys + * @param ActivationStrategyInterface|int|string $inner an ActivationStrategyInterface to decorate */ - public function __construct(RequestStack $requestStack, array $exclusions, $actionLevel) + public function __construct(RequestStack $requestStack, array $exclusions, $inner) { + if (!$inner instanceof ActivationStrategyInterface) { + trigger_deprecation('symfony/monolog-bridge', '5.2', 'Passing an actionLevel (int|string) as constructor\'s 3rd argument of "%s" is deprecated, "%s" expected.', __CLASS__, ActivationStrategyInterface::class); + + $actionLevel = $inner; + $inner = new ErrorLevelActivationStrategy($actionLevel); + } + foreach ($exclusions as $exclusion) { if (!\array_key_exists('code', $exclusion)) { throw new \LogicException(sprintf('An exclusion must have a "code" key.')); @@ -39,15 +52,14 @@ public function __construct(RequestStack $requestStack, array $exclusions, $acti } } - parent::__construct($actionLevel); - + $this->inner = $inner; $this->requestStack = $requestStack; $this->exclusions = $exclusions; } public function isHandlerActivated(array $record): bool { - $isActivated = parent::isHandlerActivated($record); + $isActivated = $this->inner->isHandlerActivated($record); if ( $isActivated diff --git a/src/Symfony/Bridge/Monolog/Handler/FingersCrossed/NotFoundActivationStrategy.php b/src/Symfony/Bridge/Monolog/Handler/FingersCrossed/NotFoundActivationStrategy.php index f73cd2f41b753..a9806d7e92ea6 100644 --- a/src/Symfony/Bridge/Monolog/Handler/FingersCrossed/NotFoundActivationStrategy.php +++ b/src/Symfony/Bridge/Monolog/Handler/FingersCrossed/NotFoundActivationStrategy.php @@ -11,6 +11,7 @@ namespace Symfony\Bridge\Monolog\Handler\FingersCrossed; +use Monolog\Handler\FingersCrossed\ActivationStrategyInterface; use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy; use Symfony\Component\HttpFoundation\RequestStack; use Symfony\Component\HttpKernel\Exception\HttpException; @@ -20,23 +21,36 @@ * * @author Jordi Boggiano * @author Fabien Potencier + * @author Pierrick Vignand + * + * @final */ -class NotFoundActivationStrategy extends ErrorLevelActivationStrategy +class NotFoundActivationStrategy extends ErrorLevelActivationStrategy implements ActivationStrategyInterface { + private $inner; private $exclude; private $requestStack; - public function __construct(RequestStack $requestStack, array $excludedUrls, $actionLevel) + /** + * @param ActivationStrategyInterface|int|string $inner an ActivationStrategyInterface to decorate + */ + public function __construct(RequestStack $requestStack, array $excludedUrls, $inner) { - parent::__construct($actionLevel); + if (!$inner instanceof ActivationStrategyInterface) { + trigger_deprecation('symfony/monolog-bridge', '5.2', 'Passing an actionLevel (int|string) as constructor\'s 3rd argument of "%s" is deprecated, "%s" expected.', __CLASS__, ActivationStrategyInterface::class); + + $actionLevel = $inner; + $inner = new ErrorLevelActivationStrategy($actionLevel); + } + $this->inner = $inner; $this->requestStack = $requestStack; $this->exclude = '{('.implode('|', $excludedUrls).')}i'; } public function isHandlerActivated(array $record): bool { - $isActivated = parent::isHandlerActivated($record); + $isActivated = $this->inner->isHandlerActivated($record); if ( $isActivated diff --git a/src/Symfony/Bridge/Monolog/Tests/Handler/FingersCrossed/HttpCodeActivationStrategyTest.php b/src/Symfony/Bridge/Monolog/Tests/Handler/FingersCrossed/HttpCodeActivationStrategyTest.php index 75bbe16c146e1..fdf2811876877 100644 --- a/src/Symfony/Bridge/Monolog/Tests/Handler/FingersCrossed/HttpCodeActivationStrategyTest.php +++ b/src/Symfony/Bridge/Monolog/Tests/Handler/FingersCrossed/HttpCodeActivationStrategyTest.php @@ -11,6 +11,7 @@ namespace Symfony\Bridge\Monolog\Tests\Handler\FingersCrossed; +use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy; use Monolog\Logger; use PHPUnit\Framework\TestCase; use Symfony\Bridge\Monolog\Handler\FingersCrossed\HttpCodeActivationStrategy; @@ -20,13 +21,19 @@ class HttpCodeActivationStrategyTest extends TestCase { - public function testExclusionsWithoutCode() + /** + * @group legacy + */ + public function testExclusionsWithoutCodeLegacy(): void { $this->expectException('LogicException'); new HttpCodeActivationStrategy(new RequestStack(), [['urls' => []]], Logger::WARNING); } - public function testExclusionsWithoutUrls() + /** + * @group legacy + */ + public function testExclusionsWithoutUrlsLegacy(): void { $this->expectException('LogicException'); new HttpCodeActivationStrategy(new RequestStack(), [['code' => 404]], Logger::WARNING); @@ -34,8 +41,10 @@ public function testExclusionsWithoutUrls() /** * @dataProvider isActivatedProvider + * + * @group legacy */ - public function testIsActivated($url, $record, $expected) + public function testIsActivatedLegacy($url, $record, $expected): void { $requestStack = new RequestStack(); $requestStack->push(Request::create($url)); @@ -51,10 +60,44 @@ public function testIsActivated($url, $record, $expected) Logger::WARNING ); - $this->assertEquals($expected, $strategy->isHandlerActivated($record)); + self::assertEquals($expected, $strategy->isHandlerActivated($record)); + } + + public function testExclusionsWithoutCode(): void + { + $this->expectException('LogicException'); + new HttpCodeActivationStrategy(new RequestStack(), [['urls' => []]], new ErrorLevelActivationStrategy(Logger::WARNING)); + } + + public function testExclusionsWithoutUrls(): void + { + $this->expectException('LogicException'); + new HttpCodeActivationStrategy(new RequestStack(), [['code' => 404]], new ErrorLevelActivationStrategy(Logger::WARNING)); + } + + /** + * @dataProvider isActivatedProvider + */ + public function testIsActivated($url, $record, $expected) + { + $requestStack = new RequestStack(); + $requestStack->push(Request::create($url)); + + $strategy = new HttpCodeActivationStrategy( + $requestStack, + [ + ['code' => 403, 'urls' => []], + ['code' => 404, 'urls' => []], + ['code' => 405, 'urls' => []], + ['code' => 400, 'urls' => ['^/400/a', '^/400/b']], + ], + new ErrorLevelActivationStrategy(Logger::WARNING) + ); + + self::assertEquals($expected, $strategy->isHandlerActivated($record)); } - public function isActivatedProvider() + public function isActivatedProvider(): array { return [ ['/test', ['level' => Logger::ERROR], true], @@ -70,7 +113,7 @@ public function isActivatedProvider() ]; } - protected function getContextException($code) + private function getContextException(int $code): array { return ['exception' => new HttpException($code)]; } diff --git a/src/Symfony/Bridge/Monolog/Tests/Handler/FingersCrossed/NotFoundActivationStrategyTest.php b/src/Symfony/Bridge/Monolog/Tests/Handler/FingersCrossed/NotFoundActivationStrategyTest.php index b04678106c96e..3d8445df3b915 100644 --- a/src/Symfony/Bridge/Monolog/Tests/Handler/FingersCrossed/NotFoundActivationStrategyTest.php +++ b/src/Symfony/Bridge/Monolog/Tests/Handler/FingersCrossed/NotFoundActivationStrategyTest.php @@ -11,6 +11,7 @@ namespace Symfony\Bridge\Monolog\Tests\Handler\FingersCrossed; +use Monolog\Handler\FingersCrossed\ErrorLevelActivationStrategy; use Monolog\Logger; use PHPUnit\Framework\TestCase; use Symfony\Bridge\Monolog\Handler\FingersCrossed\NotFoundActivationStrategy; @@ -22,18 +23,33 @@ class NotFoundActivationStrategyTest extends TestCase { /** * @dataProvider isActivatedProvider + * + * @group legacy */ - public function testIsActivated($url, $record, $expected) + public function testIsActivatedLegacy(string $url, array $record, bool $expected): void { $requestStack = new RequestStack(); $requestStack->push(Request::create($url)); $strategy = new NotFoundActivationStrategy($requestStack, ['^/foo', 'bar'], Logger::WARNING); - $this->assertEquals($expected, $strategy->isHandlerActivated($record)); + self::assertEquals($expected, $strategy->isHandlerActivated($record)); } - public function isActivatedProvider() + /** + * @dataProvider isActivatedProvider + */ + public function testIsActivated(string $url, array $record, bool $expected): void + { + $requestStack = new RequestStack(); + $requestStack->push(Request::create($url)); + + $strategy = new NotFoundActivationStrategy($requestStack, ['^/foo', 'bar'], new ErrorLevelActivationStrategy(Logger::WARNING)); + + self::assertEquals($expected, $strategy->isHandlerActivated($record)); + } + + public function isActivatedProvider(): array { return [ ['/test', ['level' => Logger::DEBUG], false], @@ -48,7 +64,7 @@ public function isActivatedProvider() ]; } - protected function getContextException($code) + protected function getContextException(int $code): array { return ['exception' => new HttpException($code)]; } diff --git a/src/Symfony/Bridge/Monolog/composer.json b/src/Symfony/Bridge/Monolog/composer.json index 1edbe8a677732..b261b3de75016 100644 --- a/src/Symfony/Bridge/Monolog/composer.json +++ b/src/Symfony/Bridge/Monolog/composer.json @@ -19,7 +19,8 @@ "php": ">=7.2.5", "monolog/monolog": "^1.25.1|^2", "symfony/service-contracts": "^1.1|^2", - "symfony/http-kernel": "^4.4|^5.0" + "symfony/http-kernel": "^4.4|^5.0", + "symfony/deprecation-contracts": "^2.1" }, "require-dev": { "symfony/console": "^4.4|^5.0", pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy