Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 9c2bc76

Browse files
committed
Merge branch '6.4' into 7.0
* 6.4: [WebProfilerBundle] Replace last "old" icon + delete ICONS_LICENCE.txt Fix security tests [Messenger] Fix DoctrineIntegrationTest [FrameworkBundle] Remove obsolete feature detection [PsrHttpMessageBridge] Remove Cookie::create() detection PHP 8.3 highlight_file function output changes
2 parents 0839d5a + b36ffe4 commit 9c2bc76

File tree

10 files changed

+68
-98
lines changed

10 files changed

+68
-98
lines changed

src/Symfony/Bridge/PsrHttpMessage/Tests/Functional/CovertTest.php

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -195,11 +195,7 @@ public static function responseProvider(): array
195195
['x-symfony' => ['3.4']]
196196
);
197197

198-
if (method_exists(Cookie::class, 'create')) {
199-
$cookie = Cookie::create('city', 'Lille', new \DateTime('Wed, 13 Jan 2021 22:23:01 GMT'));
200-
} else {
201-
$cookie = new Cookie('city', 'Lille', new \DateTime('Wed, 13 Jan 2021 22:23:01 GMT'));
202-
}
198+
$cookie = Cookie::create('city', 'Lille', new \DateTime('Wed, 13 Jan 2021 22:23:01 GMT'));
203199

204200
$sfResponse->headers->setCookie($cookie);
205201
$body = Psr7Stream::create();

src/Symfony/Bridge/Twig/Extension/CodeExtension.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -117,11 +117,21 @@ public function fileExcerpt(string $file, int $line, int $srcContext = 3): ?stri
117117
// highlight_file could throw warnings
118118
// see https://bugs.php.net/25725
119119
$code = @highlight_file($file, true);
120-
// remove main code/span tags
121-
$code = preg_replace('#^<code.*?>\s*<span.*?>(.*)</span>\s*</code>#s', '\\1', $code);
122-
// split multiline spans
123-
$code = preg_replace_callback('#<span ([^>]++)>((?:[^<]*+<br \/>)++[^<]*+)</span>#', fn ($m) => "<span $m[1]>".str_replace('<br />', "</span><br /><span $m[1]>", $m[2]).'</span>', $code);
124-
$content = explode('<br />', $code);
120+
if (\PHP_VERSION_ID >= 80300) {
121+
// remove main pre/code tags
122+
$code = preg_replace('#^<pre.*?>\s*<code.*?>(.*)</code>\s*</pre>#s', '\\1', $code);
123+
// split multiline code tags
124+
$code = preg_replace_callback('#<code ([^>]++)>((?:[^<]*+\\n)++[^<]*+)</code>#', fn ($m) => "<code $m[1]>".str_replace("\n", "</code>\n<code $m[1]>", $m[2]).'</code>', $code);
125+
// Convert spaces to html entities to preserve indentation when rendered
126+
$code = str_replace(' ', '&nbsp;', $code);
127+
$content = explode("\n", $code);
128+
} else {
129+
// remove main code/span tags
130+
$code = preg_replace('#^<code.*?>\s*<span.*?>(.*)</span>\s*</code>#s', '\\1', $code);
131+
// split multiline spans
132+
$code = preg_replace_callback('#<span ([^>]++)>((?:[^<]*+<br \/>)++[^<]*+)</span>#', fn ($m) => "<span $m[1]>".str_replace('<br />', "</span><br /><span $m[1]>", $m[2]).'</span>', $code);
133+
$content = explode('<br />', $code);
134+
}
125135

126136
$lines = [];
127137
if (0 > $srcContext) {

src/Symfony/Bundle/FrameworkBundle/DependencyInjection/FrameworkExtension.php

Lines changed: 22 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,6 @@
4040
use Symfony\Component\Cache\Adapter\ChainAdapter;
4141
use Symfony\Component\Cache\Adapter\TagAwareAdapter;
4242
use Symfony\Component\Cache\DependencyInjection\CachePoolPass;
43-
use Symfony\Component\Cache\Marshaller\DefaultMarshaller;
4443
use Symfony\Component\Cache\Marshaller\MarshallerInterface;
4544
use Symfony\Component\Cache\ResettableInterface;
4645
use Symfony\Component\Clock\ClockInterface;
@@ -73,7 +72,6 @@
7372
use Symfony\Component\ExpressionLanguage\ExpressionLanguage;
7473
use Symfony\Component\Finder\Finder;
7574
use Symfony\Component\Finder\Glob;
76-
use Symfony\Component\Form\ChoiceList\Factory\CachingFactoryDecorator;
7775
use Symfony\Component\Form\Extension\HtmlSanitizer\Type\TextTypeHtmlSanitizerExtension;
7876
use Symfony\Component\Form\Form;
7977
use Symfony\Component\Form\FormTypeExtensionInterface;
@@ -93,8 +91,6 @@
9391
use Symfony\Component\HttpKernel\Attribute\AsTargetedValueResolver;
9492
use Symfony\Component\HttpKernel\CacheClearer\CacheClearerInterface;
9593
use Symfony\Component\HttpKernel\CacheWarmer\CacheWarmerInterface;
96-
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\BackedEnumValueResolver;
97-
use Symfony\Component\HttpKernel\Controller\ArgumentResolver\UidValueResolver;
9894
use Symfony\Component\HttpKernel\Controller\ValueResolverInterface;
9995
use Symfony\Component\HttpKernel\DataCollector\DataCollectorInterface;
10096
use Symfony\Component\HttpKernel\DependencyInjection\Extension;
@@ -110,7 +106,6 @@
110106
use Symfony\Component\Mercure\HubRegistry;
111107
use Symfony\Component\Messenger\Attribute\AsMessageHandler;
112108
use Symfony\Component\Messenger\Bridge as MessengerBridge;
113-
use Symfony\Component\Messenger\Command\StatsCommand;
114109
use Symfony\Component\Messenger\Handler\BatchHandlerInterface;
115110
use Symfony\Component\Messenger\MessageBus;
116111
use Symfony\Component\Messenger\MessageBusInterface;
@@ -144,7 +139,6 @@
144139
use Symfony\Component\RateLimiter\Storage\CacheStorage;
145140
use Symfony\Component\RemoteEvent\Attribute\AsRemoteEventConsumer;
146141
use Symfony\Component\RemoteEvent\RemoteEvent;
147-
use Symfony\Component\Routing\Loader\Psr4DirectoryLoader;
148142
use Symfony\Component\Scheduler\Attribute\AsSchedule;
149143
use Symfony\Component\Scheduler\Messenger\SchedulerTransportFactory;
150144
use Symfony\Component\Security\Core\AuthenticationEvents;
@@ -161,7 +155,6 @@
161155
use Symfony\Component\Serializer\Mapping\Loader\YamlFileLoader;
162156
use Symfony\Component\Serializer\Normalizer\DenormalizerInterface;
163157
use Symfony\Component\Serializer\Normalizer\NormalizerInterface;
164-
use Symfony\Component\Serializer\Normalizer\UnwrappingDenormalizer;
165158
use Symfony\Component\Serializer\Serializer;
166159
use Symfony\Component\Stopwatch\Stopwatch;
167160
use Symfony\Component\String\LazyString;
@@ -174,7 +167,6 @@
174167
use Symfony\Component\Translation\Translator;
175168
use Symfony\Component\Uid\Factory\UuidFactory;
176169
use Symfony\Component\Uid\UuidV4;
177-
use Symfony\Component\Validator\Constraints\WhenValidator;
178170
use Symfony\Component\Validator\ConstraintValidatorInterface;
179171
use Symfony\Component\Validator\Mapping\Loader\PropertyInfoLoader;
180172
use Symfony\Component\Validator\ObjectInitializerInterface;
@@ -216,11 +208,6 @@ public function load(array $configs, ContainerBuilder $container): void
216208
}
217209

218210
$loader->load('web.php');
219-
220-
if (!class_exists(BackedEnumValueResolver::class)) {
221-
$container->removeDefinition('argument_resolver.backed_enum_resolver');
222-
}
223-
224211
$loader->load('services.php');
225212
$loader->load('fragment_renderer.php');
226213
$loader->load('error_renderer.php');
@@ -757,11 +744,6 @@ private function registerFormConfiguration(array $config, ContainerBuilder $cont
757744
if (!ContainerBuilder::willBeAvailable('symfony/translation', Translator::class, ['symfony/framework-bundle', 'symfony/form'])) {
758745
$container->removeDefinition('form.type_extension.upload.validator');
759746
}
760-
if (!method_exists(CachingFactoryDecorator::class, 'reset')) {
761-
$container->getDefinition('form.choice_list_factory.cached')
762-
->clearTag('kernel.reset')
763-
;
764-
}
765747
}
766748

767749
private function registerHttpCacheConfiguration(array $config, ContainerBuilder $container, bool $httpMethodOverride): void
@@ -1200,10 +1182,6 @@ private function registerRouterConfiguration(array $config, ContainerBuilder $co
12001182
$container->getDefinition('router.request_context')
12011183
->replaceArgument(0, $config['default_uri']);
12021184
}
1203-
1204-
if (!class_exists(Psr4DirectoryLoader::class)) {
1205-
$container->removeDefinition('routing.loader.psr4');
1206-
}
12071185
}
12081186

12091187
private function registerSessionConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader): void
@@ -1557,7 +1535,7 @@ private function registerTranslatorConfiguration(array $config, ContainerBuilder
15571535
TranslationBridge\Crowdin\CrowdinProviderFactory::class => 'translation.provider_factory.crowdin',
15581536
TranslationBridge\Loco\LocoProviderFactory::class => 'translation.provider_factory.loco',
15591537
TranslationBridge\Lokalise\LokaliseProviderFactory::class => 'translation.provider_factory.lokalise',
1560-
PhraseProviderFactory::class => 'translation.provider_factory.phrase',
1538+
TranslationBridge\Phrase\PhraseProviderFactory::class => 'translation.provider_factory.phrase',
15611539
];
15621540

15631541
$parentPackages = ['symfony/framework-bundle', 'symfony/translation', 'symfony/http-client'];
@@ -1665,10 +1643,6 @@ private function registerValidationConfiguration(array $config, ContainerBuilder
16651643
if (!class_exists(ExpressionLanguage::class)) {
16661644
$container->removeDefinition('validator.expression_language');
16671645
}
1668-
1669-
if (!class_exists(WhenValidator::class)) {
1670-
$container->removeDefinition('validator.when');
1671-
}
16721646
}
16731647

16741648
private function registerValidatorMapping(ContainerBuilder $container, array $config, array &$files): void
@@ -1836,7 +1810,7 @@ private function registerSerializerConfiguration(array $config, ContainerBuilder
18361810
$container->removeDefinition('serializer.encoder.yaml');
18371811
}
18381812

1839-
if (!class_exists(UnwrappingDenormalizer::class) || !$this->isInitializedConfigEnabled('property_access')) {
1813+
if (!$this->isInitializedConfigEnabled('property_access')) {
18401814
$container->removeDefinition('serializer.denormalizer.unwrapping');
18411815
}
18421816

@@ -2041,7 +2015,7 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
20412015
throw new LogicException('Messenger support cannot be enabled as the Messenger component is not installed. Try running "composer require symfony/messenger".');
20422016
}
20432017

2044-
if (!$this->hasConsole() || !class_exists(StatsCommand::class)) {
2018+
if (!$this->hasConsole()) {
20452019
$container->removeDefinition('console.command.messenger_stats');
20462020
}
20472021

@@ -2280,10 +2254,6 @@ private function registerMessengerConfiguration(array $config, ContainerBuilder
22802254

22812255
private function registerCacheConfiguration(array $config, ContainerBuilder $container): void
22822256
{
2283-
if (!class_exists(DefaultMarshaller::class)) {
2284-
$container->removeDefinition('cache.default_marshaller');
2285-
}
2286-
22872257
$version = new Parameter('container.build_id');
22882258
$container->getDefinition('cache.adapter.apcu')->replaceArgument(2, $version);
22892259
$container->getDefinition('cache.adapter.system')->replaceArgument(2, $version);
@@ -2344,16 +2314,10 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
23442314
$container->register($name, TagAwareAdapter::class)
23452315
->addArgument(new Reference('.'.$name.'.inner'))
23462316
->addArgument(true !== $pool['tags'] ? new Reference($pool['tags']) : null)
2317+
->addMethodCall('setLogger', [new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)])
23472318
->setPublic($pool['public'])
23482319
->addTag('cache.taggable', ['pool' => $name])
2349-
;
2350-
2351-
if (method_exists(TagAwareAdapter::class, 'setLogger')) {
2352-
$container
2353-
->getDefinition($name)
2354-
->addMethodCall('setLogger', [new Reference('logger', ContainerInterface::IGNORE_ON_INVALID_REFERENCE)])
2355-
->addTag('monolog.logger', ['channel' => 'cache']);
2356-
}
2320+
->addTag('monolog.logger', ['channel' => 'cache']);
23572321

23582322
$pool['name'] = $tagAwareId = $name;
23592323
$pool['public'] = false;
@@ -2379,7 +2343,7 @@ private function registerCacheConfiguration(array $config, ContainerBuilder $con
23792343
$container->setDefinition($name, $definition);
23802344
}
23812345

2382-
if (method_exists(PropertyAccessor::class, 'createCache')) {
2346+
if (class_exists(PropertyAccessor::class)) {
23832347
$propertyAccessDefinition = $container->register('cache.property_access', AdapterInterface::class);
23842348

23852349
if (!$container->getParameter('kernel.debug')) {
@@ -2424,20 +2388,16 @@ private function registerHttpClientConfiguration(array $config, ContainerBuilder
24242388
$this->registerRetryableHttpClient($retryOptions, 'http_client', $container);
24252389
}
24262390

2427-
if ($hasUriTemplate = class_exists(UriTemplateHttpClient::class)) {
2428-
if (ContainerBuilder::willBeAvailable('guzzlehttp/uri-template', \GuzzleHttp\UriTemplate\UriTemplate::class, [])) {
2429-
$container->setAlias('http_client.uri_template_expander', 'http_client.uri_template_expander.guzzle');
2430-
} elseif (ContainerBuilder::willBeAvailable('rize/uri-template', \Rize\UriTemplate::class, [])) {
2431-
$container->setAlias('http_client.uri_template_expander', 'http_client.uri_template_expander.rize');
2432-
}
2433-
2434-
$container
2435-
->getDefinition('http_client.uri_template')
2436-
->setArgument(2, $defaultUriTemplateVars);
2437-
} elseif ($defaultUriTemplateVars) {
2438-
throw new LogicException('Support for URI template requires symfony/http-client 6.3 or higher, try upgrading.');
2391+
if (ContainerBuilder::willBeAvailable('guzzlehttp/uri-template', \GuzzleHttp\UriTemplate\UriTemplate::class, [])) {
2392+
$container->setAlias('http_client.uri_template_expander', 'http_client.uri_template_expander.guzzle');
2393+
} elseif (ContainerBuilder::willBeAvailable('rize/uri-template', \Rize\UriTemplate::class, [])) {
2394+
$container->setAlias('http_client.uri_template_expander', 'http_client.uri_template_expander.rize');
24392395
}
24402396

2397+
$container
2398+
->getDefinition('http_client.uri_template')
2399+
->setArgument(2, $defaultUriTemplateVars);
2400+
24412401
foreach ($config['scoped_clients'] as $name => $scopeConfig) {
24422402
if ($container->has($name)) {
24432403
throw new InvalidArgumentException(sprintf('Invalid scope name: "%s" is reserved.', $name));
@@ -2468,16 +2428,14 @@ private function registerHttpClientConfiguration(array $config, ContainerBuilder
24682428
$this->registerRetryableHttpClient($retryOptions, $name, $container);
24692429
}
24702430

2471-
if ($hasUriTemplate) {
2472-
$container
2473-
->register($name.'.uri_template', UriTemplateHttpClient::class)
2474-
->setDecoratedService($name, null, 7) // Between TraceableHttpClient (5) and RetryableHttpClient (10)
2475-
->setArguments([
2476-
new Reference($name.'.uri_template.inner'),
2477-
new Reference('http_client.uri_template_expander', ContainerInterface::NULL_ON_INVALID_REFERENCE),
2478-
$defaultUriTemplateVars,
2479-
]);
2480-
}
2431+
$container
2432+
->register($name.'.uri_template', UriTemplateHttpClient::class)
2433+
->setDecoratedService($name, null, 7) // Between TraceableHttpClient (5) and RetryableHttpClient (10)
2434+
->setArguments([
2435+
new Reference($name.'.uri_template.inner'),
2436+
new Reference('http_client.uri_template_expander', ContainerInterface::NULL_ON_INVALID_REFERENCE),
2437+
$defaultUriTemplateVars,
2438+
]);
24812439

24822440
$container->registerAliasForArgument($name, HttpClientInterface::class);
24832441

@@ -2889,10 +2847,6 @@ private function registerUidConfiguration(array $config, ContainerBuilder $conta
28892847
$container->getDefinition('name_based_uuid.factory')
28902848
->setArguments([$config['name_based_uuid_namespace']]);
28912849
}
2892-
2893-
if (!class_exists(UidValueResolver::class)) {
2894-
$container->removeDefinition('argument_resolver.uid');
2895-
}
28962850
}
28972851

28982852
private function registerHtmlSanitizerConfiguration(array $config, ContainerBuilder $container, PhpFileLoader $loader): void

src/Symfony/Bundle/WebProfilerBundle/Resources/ICONS_LICENSE.txt

Lines changed: 0 additions & 5 deletions
This file was deleted.

src/Symfony/Bundle/WebProfilerBundle/Resources/views/Collector/messenger.html.twig

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,9 @@
88
.message-item tbody tr td:first-child { width: 170px; }
99
1010
.message-item .label { float: right; padding: 1px 5px; opacity: .75; margin-left: 5px; }
11-
.message-item .toggle-button { position: absolute; right: 6px; top: 6px; opacity: .5; pointer-events: none }
11+
.message-item .toggle-button { position: absolute; right: 6px; top: 6px; opacity: .5; pointer-events: none; color: inherit; }
1212
.message-item .icon svg { height: 24px; width: 24px; }
13+
.message-item .icon-close svg { transform: rotate(180deg); }
1314
1415
.message-item .sf-toggle-off .icon-close, .sf-toggle-on .icon-open { display: none; }
1516
.message-item .sf-toggle-off .icon-open, .sf-toggle-on .icon-close { display: block; }
@@ -131,10 +132,10 @@
131132
{% if dispatchCall.exception is defined %}
132133
<span class="label status-error">exception</span>
133134
{% endif %}
134-
<a class="toggle-button">
135-
<span class="icon icon-close">{{ source('@WebProfiler/images/icon-minus-square.svg') }}</span>
136-
<span class="icon icon-open">{{ source('@WebProfiler/images/icon-plus-square.svg') }}</span>
137-
</a>
135+
<button class="btn btn-link toggle-button" type="button">
136+
<span class="icon icon-close">{{ source('@WebProfiler/Icon/chevron-down.svg') }}</span>
137+
<span class="icon icon-open">{{ source('@WebProfiler/Icon/chevron-down.svg') }}</span>
138+
</button>
138139
</th>
139140
</tr>
140141
</thead>
Lines changed: 4 additions & 0 deletions
Loading

src/Symfony/Bundle/WebProfilerBundle/Resources/views/images/icon-minus-square.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/Symfony/Bundle/WebProfilerBundle/Resources/views/images/icon-plus-square.svg

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/Symfony/Component/ErrorHandler/ErrorRenderer/HtmlErrorRenderer.php

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -262,11 +262,21 @@ private function fileExcerpt(string $file, int $line, int $srcContext = 3): stri
262262
// highlight_file could throw warnings
263263
// see https://bugs.php.net/25725
264264
$code = @highlight_file($file, true);
265-
// remove main code/span tags
266-
$code = preg_replace('#^<code.*?>\s*<span.*?>(.*)</span>\s*</code>#s', '\\1', $code);
267-
// split multiline spans
268-
$code = preg_replace_callback('#<span ([^>]++)>((?:[^<]*+<br \/>)++[^<]*+)</span>#', fn ($m) => "<span $m[1]>".str_replace('<br />', "</span><br /><span $m[1]>", $m[2]).'</span>', $code);
269-
$content = explode('<br />', $code);
265+
if (\PHP_VERSION_ID >= 80300) {
266+
// remove main pre/code tags
267+
$code = preg_replace('#^<pre.*?>\s*<code.*?>(.*)</code>\s*</pre>#s', '\\1', $code);
268+
// split multiline code tags
269+
$code = preg_replace_callback('#<code ([^>]++)>((?:[^<]*+\\n)++[^<]*+)</code>#', fn ($m) => "<code $m[1]>".str_replace("\n", "</code>\n<code $m[1]>", $m[2]).'</code>', $code);
270+
// Convert spaces to html entities to preserve indentation when rendered
271+
$code = str_replace(' ', '&nbsp;', $code);
272+
$content = explode("\n", $code);
273+
} else {
274+
// remove main code/span tags
275+
$code = preg_replace('#^<code.*?>\s*<span.*?>(.*)</span>\s*</code>#s', '\\1', $code);
276+
// split multiline spans
277+
$code = preg_replace_callback('#<span ([^>]++)>((?:[^<]*+<br \/>)++[^<]*+)</span>#', fn ($m) => "<span $m[1]>".str_replace('<br />', "</span><br /><span $m[1]>", $m[2]).'</span>', $code);
278+
$content = explode('<br />', $code);
279+
}
270280

271281
$lines = [];
272282
if (0 > $srcContext) {

0 commit comments

Comments
 (0)