forked from symfony/symfony
-
-
Notifications
You must be signed in to change notification settings - Fork 0
Serializer metadata refactoring #1
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
dunglas
added a commit
that referenced
this pull request
Mar 1, 2015
Serializer metadata refactoring
dunglas
pushed a commit
that referenced
this pull request
Jun 15, 2015
…alue (ogizanagi) This PR was merged into the 2.7 branch. Discussion ---------- [Console] Fix first choice was invalid when using value | Q | A | ------------- | --- | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | - This PR solves the following issues encountered using question helper and choices questions: - First choice was not selectable by value. - ChoiceList with associative choices with mixed string and int keys has same issue with first choice. - Fix inconsistency by always returning values as strings. First point exemple:  Last two points are mainly edge cases. Indeed, if a QuestionChoice has something like : ```php array( '0' => 'No environment', '1' => 'My environment 1', 'env_2' => 'My environment 2', 3 => 'My environment 3', ); ``` as choices, you will not be able to select the first choice and get an `InvalidArgumentException`: ``` There were 2 errors: 1) Symfony\Component\Console\Tests\Helper\QuestionHelperTest::testChoiceFromChoicelistWithMixedKeys with data set #0 ('0', '0') InvalidArgumentException: Value "0" is invalid 2) Symfony\Component\Console\Tests\Helper\QuestionHelperTest::testChoiceFromChoicelistWithMixedKeys with data set #1 ('No environment', '0') InvalidArgumentException: Value "No environment" is invalid ``` Moreover, even if you were able to select by value (`No environment`), you'll get an integer instead of a string: ``` Failed asserting that '0' is identical to 0. ``` For more consistency, the solution is to always return a string. The issue does not exist in 2.6, as the `QuestionChoice::getDefaultValidator` handled things differently. Commits ------- 03e4ab6 [Console] Fix first choice was invalid when using value
dunglas
added a commit
that referenced
this pull request
Sep 21, 2015
…pport Hacklang property typehint support
dunglas
pushed a commit
that referenced
this pull request
Dec 4, 2015
…eprecation on-demand (nicolas-grekas) This PR was merged into the 2.8 branch. Discussion ---------- [Bridge\PhpUnit] Display the stack trace of a deprecation on-demand | Q | A | ------------- | --- | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | - This PR has been essential into making symfony#16708, and I think everyone working on a 3.0 migration will need this. Example: ``` $ SYMFONY_DEPRECATIONS_HELPER=/FormExtensionBootstrap3LayoutTest/ ./phpunit src/Symfony/Bridge/Twig/ PHPUnit 4.8.18 by Sebastian Bergmann and contributors. Testing src/Symfony/Bridge/Twig/ ................................................ Remaining deprecation triggered by Symfony\Bridge\Twig\Tests\Extension\FormExtensionBootstrap3LayoutTest::testSingleChoiceGrouped: The value "false" for the "choices_as_values" option is deprecated since version 2.8 and will not be supported anymore in 3.0. Set this option to "true" and flip the contents of the "choices" option instead. Stack trace: #0 src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php(286): trigger_error() #1 src/Symfony/Component/OptionsResolver/OptionsResolver.php(962): Symfony\Component\Form\Extension\Core\Type\ChoiceType->Symfony\Component\Form\Extension\Core\Type\{closure}() #2 src/Symfony/Component/Form/Extension/Core/Type/ChoiceType.php(277): Symfony\Component\OptionsResolver\OptionsResolver->offsetGet() #3 src/Symfony/Component/OptionsResolver/OptionsResolver.php(962): Symfony\Component\Form\Extension\Core\Type\ChoiceType->Symfony\Component\Form\Extension\Core\Type\{closure}() #4 src/Symfony/Component/OptionsResolver/OptionsResolver.php(791): Symfony\Component\OptionsResolver\OptionsResolver->offsetGet() #5 src/Symfony/Component/Form/ResolvedFormType.php(156): Symfony\Component\OptionsResolver\OptionsResolver->resolve() symfony#6 src/Symfony/Component/Form/FormFactory.php(119): Symfony\Component\Form\ResolvedFormType->createBuilder() symfony#7 src/Symfony/Component/Form/FormFactory.php(48): Symfony\Component\Form\FormFactory->createNamedBuilder() symfony#8 src/Symfony/Component/Form/Tests/AbstractBootstrap3LayoutTest.php(540): Symfony\Component\Form\FormFactory->createNamed() symfony#9 [internal function]: Symfony\Component\Form\Tests\AbstractBootstrap3LayoutTest->testSingleChoiceGrouped() symfony#10 {main} KO src/Symfony/Bridge/Twig/ ``` Commits ------- 5a88fb6 [Bridge\PhpUnit] Display the stack trace of a deprecation on-demand
dunglas
pushed a commit
that referenced
this pull request
Jul 16, 2016
Prevent BC in instantiateObject
dunglas
added a commit
that referenced
this pull request
Jul 16, 2016
This PR was merged into the 3.2-dev branch.
Discussion
----------
[Serializer] Argument objects
| Q | A
| ------------- | ---
| Branch? | 3.1
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | TODO
| Fixed tickets | none
| License | MIT
| Doc PR | TODO
Assuming with have the two following entities:
```php
namespace AppBundle\Entity;
class Dummy
{
public function __construct(int $id, string $name, string $email, AnotherDummy $anotherDummy)
{
$this->id = $id;
$this->name = $name;
$this->email = $email;
$this->anotherDummy = $anotherDummy;
}
}
class AnotherDummy
{
public function __construct(int $id, string $uuid, bool $isEnabled)
{
$this->id = $id;
$this->uuid = $uuid;
$this->isEnabled = $isEnabled;
}
}
```
Doing the following will fail:
```php
$serializer->denormalize(
[
'id' => $i,
'name' => 'dummy',
'email' => '[email protected]',
'another_dummy' => [
'id' => 1000 + $i,
'uuid' => 'azerty',
'is_enabled' => true,
],
],
\AppBundle\Entity\Dummy::class
);
```
with a type error, because the 4th argument passed to `Dummy::__construct()` will be an array. The following patch checks if the type of the argument is an object, and if it is tries to denormalize that object as well.
I'm not sure if it's me missing something or this is a use case that has been omitted (willingly or not), but if it's a valuable patch I would be happy to work on finishing it.
Commits
-------
988eba1 fix tests
98bcb91 Merge pull request #1 from dunglas/theofidry-feature/param-object
7b5d55d Prevent BC in instantiateObject
e437e04 fix reflection type
3fe9802 revert CS
5556fa5 fix
d4cdb00 fix CS
93608dc Add deprecation message
f46a176 Apply patch
f361e52 fix tests
4884a2e f1
e64e999 Address comments
e99a90b Add tests
7bd4ac5 Test
dunglas
pushed a commit
that referenced
this pull request
Jan 23, 2017
…er in autowired classes (brainexe) This PR was squashed before being merged into the 3.1 branch (closes symfony#21372). Discussion ---------- [DependencyInjection] Fixed variadic method parameter in autowired classes | Q | A | ------------- | --- | Branch? | 3.1 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | -- | License | MIT Autowiring classes containing methods with variadic method parameter throws a ReflectionException in compile process: ``` PHP Fatal error: Uncaught ReflectionException: Internal error: Failed to retrieve the default value in /.../vendor/symfony/dependency-injection/Compiler/AutowirePass.php:437 Stack trace: #0 /.../vendor/symfony/dependency-injection/Compiler/AutowirePass.php(437): ReflectionParameter->getDefaultValue() #1 /.../vendor/symfony/dependency-injection/Compiler/AutowirePass.php(80): Symfony\Component\DependencyInjection\Compiler\AutowirePass::getResourceMetadataForMethod(Object(ReflectionMethod)) #2 /.../vendor/symfony/dependency-injection/Compiler/AutowirePass.php(105): Symfony\Component\DependencyInjection\Compiler\AutowirePass::createResourceForClass(Object(ReflectionClass)) #3 /.../vendor/symfony/dependency-injection/Compiler/AutowirePass.php(48): Symfony\Component\DependencyInjection\Compiler\AutowirePass->completeDefinition('__controller.Sw...', Object(Symfony\Component\DependencyInjection\Definition), Array) #4 /.../vendor/symfony/dependency-injection/Compiler/Compiler in /.../vendor/symfony/dependency-injection/Compiler/AutowirePass.php on line 437 ``` **Example:** ``` <?php class FooVariadic { public function bar(...$arguments) { } } $method = new ReflectionMethod(FooVariadic::class, 'bar'); $parameter = $method->getParameters()[0]; $parameter->getDefaultValue(); // -> ReflectionException: Internal error: Failed to retrieve the default value in ... ``` Commits ------- a7f63de [DependencyInjection] Fixed variadic method parameter in autowired classes
dunglas
pushed a commit
that referenced
this pull request
Jan 30, 2017
…capable of searching for the DN (lsmith77, nietonfir) This PR was merged into the 3.3-dev branch. Discussion ---------- [Security] make LdapBindAuthenticationProvider capable of searching for the DN | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | symfony#16823, symfony#20905 | License | MIT | Doc PR | symfony/symfony-docs#7420 I guess due to the separation between the user and auth provider something like the following isn't ok (note: the following works just fine for me but if course in the end the username is the DN and not the user provided shorter username): ```diff diff --git a/src/Symfony/Component/Security/Core/Authentication/Provider/LdapBindAuthenticationProvider.php b/src/Symfony/Component/Security/Core/Authentication/Provider/LdapBindAuthenticationProvider.php index 5ebb09a..18d7825 100644 --- a/src/Symfony/Component/Security/Core/Authentication/Provider/LdapBindAuthenticationProvider.php +++ b/src/Symfony/Component/Security/Core/Authentication/Provider/LdapBindAuthenticationProvider.php @@ -70,7 +70,7 @@ class LdapBindAuthenticationProvider extends UserAuthenticationProvider */ protected function checkAuthentication(UserInterface $user, UsernamePasswordToken $token) { - $username = $token->getUsername(); + $username = $user->getUsername(); $password = $token->getCredentials(); if ('' === $password) { @@ -78,10 +78,7 @@ class LdapBindAuthenticationProvider extends UserAuthenticationProvider } try { - $username = $this->ldap->escape($username, '', LdapInterface::ESCAPE_DN); - $dn = str_replace('{username}', $username, $this->dnString); - - $this->ldap->bind($dn, $password); + $this->ldap->bind($username, $password); } catch (ConnectionException $e) { throw new BadCredentialsException('The presented password is invalid.'); } diff --git a/src/Symfony/Component/Security/Core/User/LdapUserProvider.php b/src/Symfony/Component/Security/Core/User/LdapUserProvider.php index fc42419..8194c4c 100644 --- a/src/Symfony/Component/Security/Core/User/LdapUserProvider.php +++ b/src/Symfony/Component/Security/Core/User/LdapUserProvider.php @@ -115,7 +115,7 @@ class LdapUserProvider implements UserProviderInterface { $password = $this->getPassword($entry); - return new User($username, $password, $this->defaultRoles); + return new User($entry->getDn(), $password, $this->defaultRoles); } /** ``` Therefore I created an entire new auth provider. Commits ------- 8ddd533 Merge pull request #1 from nietonfir/http_basic_ldap a783e5c Update HttpBasicLdapFactory a30191f make LdapBindAuthenticationProvider capable of searching for the DN
dunglas
pushed a commit
that referenced
this pull request
Jan 30, 2017
…utput trimming (ogizanagi) This PR was merged into the 3.3-dev branch. Discussion ---------- [FrameworkBundle] Revert AbstractDescriptorTest output trimming | Q | A | ------------- | --- | Branch? | master | Bug fix? | no, but fixes an annoying/unhelping test output and fixes false positives | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | https://github.com/symfony/symfony/pull/21129/files#diff-0e52187cbf1067a310538287da74ddb5R178 | License | MIT | Doc PR | N/A #### Before output when having a failing test, for instance, in a `TextDescriptor` fixture: ```diff There was 1 failure: 1) Symfony\Bundle\FrameworkBundle\Tests\Console\Descriptor\TextDescriptorTest::testDescribeContainerDefinitionWhichIsAnAlias with data set #1 (Symfony\Component\DependencyInjection\Alias Object (...), ' // This serv...------', Symfony\Component\DependencyInjection\ContainerBuilder Object (...), array('alias_2')) Failed asserting that two strings are equal. --- Expected +++ Actual @@ @@ -' // This service is an alias for the service service_2 Information for Service "service_2" =================================== ------------------ --------------------------------- Option Value ------------------ --------------------------------- Class Full\Qualified\Class2 Tags tag1 (attr1: val1, attr2: val2) tag1 (attr3: val3) tag2 Calls setMailer Public no Synthetic yes Lazy no Shared yes Abstract no Autowired no Autowiring Types - Required File /path/to/file Factory Service factory.service Factory Method get ------------------ ---------------------------------' +' // This service is an alias for the service service_2 Information for Service "service_2" =================================== ------------------ --------------------------------- Option Value ------------------ --------------------------------- Service ID service_2 Class Full\Qualified\Class2 Tags tag1 (attr1: val1, attr2: val2) tag1 (attr3: val3) tag2 Calls setMailer Public no Synthetic yes Lazy no Shared yes Abstract no Autowired no Autowiring Types - Required File /path/to/file Factory Service factory.service Factory Method get ------------------ ---------------------------------' ``` #### After: ```diff There was 1 failure: 1) Symfony\Bundle\FrameworkBundle\Tests\Console\Descriptor\TextDescriptorTest::testDescribeContainerDefinitionWhichIsAnAlias with data set #1 (Symfony\Component\DependencyInjection\Alias Object (...), ' // This serv...------', Symfony\Component\DependencyInjection\ContainerBuilder Object (...), array('alias_2')) Failed asserting that two strings are equal. --- Expected +++ Actual @@ @@ ------------------ --------------------------------- + Service ID service_2 Class Full\Qualified\Class2 Tags tag1 (attr1: val1, attr2: val2) tag1 (attr3: val3) tag2 Calls setMailer Public no Synthetic yes Lazy no Shared yes Abstract no Autowired no Autowiring Types - Required File /path/to/file Factory Service factory.service Factory Method get ------------------ ---------------------------------' ``` Commits ------- efd00ba [FrameworkBundle] Revert AbstractDescriptorTest output trimming
dunglas
pushed a commit
that referenced
this pull request
Feb 13, 2018
…e (dmaicher) This PR was merged into the 2.8 branch. Discussion ---------- [Security] fix merge of 2.7 into 2.8 + add test case | Q | A | ------------- | --- | Branch? | 2.8 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | symfony#26109 | License | MIT | Doc PR | - This fixes the merge mistake done in symfony@899bf99 that caused this fail with the added test case: ``` There was 1 failure: 1) Symfony\Component\Security\Tests\Http\Firewall\UsernamePasswordFormAuthenticationListenerTest::testHandleNonStringUsername with data set #1 (false) Failed asserting that exception of type "TypeError" matches expected exception "\Symfony\Component\HttpKernel\Exception\BadRequestHttpException". Message was: "Argument 1 passed to Symfony\Component\Security\Http\ParameterBagUtils::getParameterBagValue() must be an instance of Symfony\Component\HttpFoundation\ParameterBag, instance of Symfony\Component\HttpFoundation\Request given, called in /var/www/symfony/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordFormAuthenticationListener.php on line 100" at /var/www/symfony/src/Symfony/Component/Security/Http/ParameterBagUtils.php:39 /var/www/symfony/src/Symfony/Component/Security/Http/Firewall/UsernamePasswordFormAuthenticationListener.php:100 /var/www/symfony/src/Symfony/Component/Security/Http/Firewall/AbstractAuthenticationListener.php:140 /var/www/symfony/src/Symfony/Component/Security/Http/Tests/Firewall/UsernamePasswordFormAuthenticationListenerTest.php:102 ``` Original fix in 2.7: https://github.com/symfony/symfony/pull/25657/files#diff-e07c3e5653e210d017545d47c1bd7e76R111 Commits ------- 51d9008 [Security] fix merge of 2.7 into 2.8 + add test case
dunglas
pushed a commit
that referenced
this pull request
Mar 11, 2018
…Handler (hjanuschka) This PR was submitted for the master branch but it was squashed and merged into the 4.0 branch instead (closes symfony#26403). Discussion ---------- fix the handling of timestamp in the MongoDBSessionHandler | Q | A | ------------- | --- | Branch? | master | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | License | MIT in the process of upgrading from 3.4 to 4.0 we stumbled upon a issue with mongo session handler. ``` [05-Mar-2018 11:12:57 Europe/Vienna] PHP Fatal error: Uncaught Error: Call to undefined method Symfony\Component\HttpFoundation\Session\Storage\Handler\MongoDbSessionHandler::createDateTime() in /opt/APP/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php:144 Stack trace: #0 [internal function]: Symfony\Component\HttpFoundation\Session\Storage\Handler\MongoDbSessionHandler->updateTimestamp('96d983b59f8aef8...', 'user_obj|O:9:"k...') #1 [internal function]: session_write_close() #2 {main} thrown in /opt/APP/vendor/symfony/http-foundation/Session/Storage/Handler/MongoDbSessionHandler.php on line 144 ``` this PR re-add's the method, that somehow got removed in 4.0 branch, whereas the interface forces to have the implemantation. Commits ------- 97d9ea8 fix the handling of timestamp in the MongoDBSessionHandler
dunglas
pushed a commit
that referenced
this pull request
Mar 20, 2018
…stamp in the MemcachedSessionHandler (Alessandro Loffredo)
This PR was merged into the 3.4 branch.
Discussion
----------
[Fix][3.4][HttpFoundation] Fix the updating of timestamp in the MemcachedSessionHandler
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| License | MIT
Conditions: Symfony 3.4, PHP7 and sessions handled over memcache.
Apparently `memcached::touch()` returns `false` on a subsequent call with the same parameters. Since `updateTimestamp` is used in `AbstractSessionHandler::write()`
```
public function write($sessionId, $data)
{
if (\PHP_VERSION_ID < 70000 && $this->prefetchData) {
$readData = $this->prefetchData;
$this->prefetchData = null;
if ($readData === $data) {
return $this->updateTimestamp($sessionId, $data);
}
}
...
```
the result is that `write()` will return `false` on **any subsequent request within the same second** causing the following error:
```
HP Fatal error: Uncaught Symfony\Component\Debug\Exception\ContextErrorException: Warning: session_write_close(): Failed to write session data (user). Please verify that the current setting of session.save_path is correct (/var/lib/php/sessions) in Unknown:0
Stack trace:
#0 [internal function]: Symfony\Component\Debug\ErrorHandler->handleError(2, 'session_write_c...', 'Unknown', 0, NULL)
#1 [internal function]: session_write_close()
#2 {main}
thrown in Unknown on line 0
```
Can be reproduced on `symfony/skeleton:3.4` adding the following code to `public/index.php` and performing two consecutive requests:
```
$session = $kernel->getContainer()->get('session');
$session->set("foo", "bar");
```
Commits
-------
d007469 fix the updating of timestamp in the MemcachedSessionHandler
dunglas
pushed a commit
that referenced
this pull request
Nov 15, 2018
…s not exist (neeckeloo)
This PR was merged into the 4.2-dev branch.
Discussion
----------
[Messenger] Improved message when handler class does not exist
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| BC breaks? | no
| Deprecations? |no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
**Problem:**
When defining a non existing messenger handler class in the `services.yml` config file, we encounter this confusing error message:
```
services:
App\Handler\NonExistentHandler:
tags: [messenger.message_handler]
```
```
PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Argument 1 passed to Symfony\Component\Messenger\DependencyInjection\MessengerPass::guessHandledClasses() must be an instance of ReflectionClass, null given, called in /app/vendor/symfony/messenger/DependencyInjection/MessengerPass.php on line 93 in /app/vendor/symfony/messenger/DependencyInjection/MessengerPass.php:189
Stack trace:
#0 /app/vendor/symfony/messenger/DependencyInjection/MessengerPass.php(93): Symfony\Component\Messenger\DependencyInjection\MessengerPass->guessHandledClasses(NULL, 'App\\Application...')
#1 /app/vendor/symfony/messenger/DependencyInjection/MessengerPass.php(74): Symfony\Component\Messenger\DependencyInjection\MessengerPass->registerHandlers(Object(Symfony\Component\DependencyInjection\ContainerBuilder), Array)
#2 /app/vendor/symfony/dependency-injection/Compiler/Compiler.php(95): Symfony\Component\Messenger\DependencyInjection\MessengerPass->process(Object(Symfony\Component\DependencyInjection\ContainerBuilder))
#3 / in /app/vendor/symfony/messenger/DependencyInjection/MessengerPass.php on line 189
```
**Proposal:**
We can throw a more relevant exception (RuntimeException) in this case to help the developer to have a better understanding of the issue.
```Invalid service "App\Handler\NonExistentHandler": class "App\Handler\NonExistentHandler" does not exist.```
Commits
-------
6ab9274 Improve error message when defining messenger handler class that does not exists
dunglas
pushed a commit
that referenced
this pull request
May 10, 2019
…logs (fabpot) This PR was merged into the 4.3-dev branch. Discussion ---------- [Messenger] Add missing information in messenger logs | Q | A | ------------- | --- | Branch? | master | Bug fix? | yes-ish | New feature? | yes-ish | BC breaks? | no | Deprecations? | no <!-- don't forget to update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tests pass? | yes <!-- please add some, will be required by reviewers --> | Fixed tickets | n/a | License | MIT | Doc PR | n/a When using `messenger:consume`, I get the following logs: ``` 2019-03-25T11:39:05+01:00 [info] Received message "Symfony\Component\Mailer\EnvelopedMessage" 2019-03-25T11:39:05+01:00 [warning] An exception occurred while handling message "Symfony\Component\Mailer\EnvelopedMessage" 2019-03-25T11:39:05+01:00 [info] Retrying Symfony\Component\Mailer\EnvelopedMessage - retry #1. 2019-03-25T11:39:05+01:00 [info] Sending message "Symfony\Component\Mailer\EnvelopedMessage" with "Symfony\Component\Messenger\Transport\AmqpExt\AmqpTransport" 2019-03-25T11:39:06+01:00 [info] Received message "Symfony\Component\Mailer\EnvelopedMessage" 2019-03-25T11:39:06+01:00 [warning] An exception occurred while handling message "Symfony\Component\Mailer\EnvelopedMessage" 2019-03-25T11:39:06+01:00 [info] Retrying Symfony\Component\Mailer\EnvelopedMessage - retry #2. 2019-03-25T11:39:06+01:00 [info] Sending message "Symfony\Component\Mailer\EnvelopedMessage" with "Symfony\Component\Messenger\Transport\AmqpExt\AmqpTransport" 2019-03-25T11:39:09+01:00 [info] Received message "Symfony\Component\Mailer\EnvelopedMessage" 2019-03-25T11:39:09+01:00 [warning] An exception occurred while handling message "Symfony\Component\Mailer\EnvelopedMessage" 2019-03-25T11:39:09+01:00 [info] Retrying Symfony\Component\Mailer\EnvelopedMessage - retry #3. 2019-03-25T11:39:09+01:00 [info] Sending message "Symfony\Component\Mailer\EnvelopedMessage" with "Symfony\Component\Messenger\Transport\AmqpExt\AmqpTransport" ``` So, an. error occurred, but I have no idea what's going on. The exception is in the context, but the context is not displayed by default. So, this PR fixes it. Commits ------- 20664ca [Messenger] added missing information in messenger logs
dunglas
pushed a commit
that referenced
this pull request
May 10, 2019
… is empty (yceruto) This PR was merged into the 4.2 branch. Discussion ---------- [HttpKernel] Fix get session when the request stack is empty | Q | A | ------------- | --- | Branch? | 4.2 | Bug fix? | yes | New feature? | no | BC breaks? | no | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT This bug happen behind an exception on a kernel response event, when one collector (e.g. `RequestDataCollector`) is trying to get the request session and the request stack is currently empty. **Reproducer** https://github.com/yceruto/get-session-bug (`GET /`) See logs on terminal: ```bash Apr 15 20:29:03 |ERROR| PHP 2019-04-15T20:29:03-04:00 Call to a member function isSecure() on null Apr 15 20:29:03 |ERROR| PHP PHP Fatal error: Uncaught Symfony\Component\Debug\Exception\FatalThrowableError: Call to a member function isSecure() on null in /home/yceruto/demos/getsession/vendor/symfony/http-kernel/EventListener/SessionListener.php:43 Apr 15 20:29:03 |DEBUG| PHP Stack trace: Apr 15 20:29:03 |DEBUG| PHP #0 /home/yceruto/demos/getsession/vendor/symfony/http-kernel/EventListener/AbstractSessionListener.php(59): Symfony\Component\HttpKernel\EventListener\SessionListener->getSession() Apr 15 20:29:03 |DEBUG| PHP #1 /home/yceruto/demos/getsession/vendor/symfony/http-foundation/Request.php(707): Symfony\Component\HttpKernel\EventListener\AbstractSessionListener->Symfony\Component\HttpKernel\EventListener\{closure}() Apr 15 20:29:03 |DEBUG| PHP #2 /home/yceruto/demos/getsession/vendor/symfony/http-kernel/DataCollector/RequestDataCollector.php(65): Symfony\Component\HttpFoundation\Request->getSession() Apr 15 20:29:03 |DEBUG| PHP #3 /home/yceruto/demos/getsession/vendor/symfony/http-kernel/Profiler/Profiler.php(167): Symfony\Component\HttpKernel\DataCollector\RequestDataCollector->collect(Object(Symfony\Component\HttpFoundation\Request), Object(Symfony\Component\HttpFoundation\Respo in /home/yceruto/demos/getsession/vendor/symfony/http-kernel/EventListener/SessionListener.php on line 43 ``` Friendly ping @nicolas-grekas as author of the previous PR symfony#28244 Commits ------- d62ca37 Fix get session when the request stack is empty
dunglas
pushed a commit
that referenced
this pull request
Jun 19, 2019
This PR was merged into the 4.3 branch. Discussion ---------- [Messenger] improve logs | Q | A | ------------- | --- | Branch? | 4.3 | Bug fix? | no | New feature? | no <!-- please update src/**/CHANGELOG.md files --> | BC breaks? | no <!-- see https://symfony.com/bc --> | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tests pass? | yes <!-- please add some, will be required by reviewers --> | Fixed tickets | | License | MIT | Doc PR | The logs are currently very confusing and duplicated: - When handled sync the uncaught error it logged and displayed by the console / http error handler anyway. Currently it the warning is duplicated and useless: ``` 14:26:11 WARNING [messenger] An exception occurred while handling message "{class}": OUCH, THAT HURTS! GO TO MOM! 14:26:11 ERROR [console] Error thrown while running command "{class}". Message: "OUCH, THAT HURTS! GO TO MOM!" In HandleMessageMiddleware.php line 82: [Symfony\Component\Messenger\Exception\HandlerFailedException] OUCH, THAT HURTS! GO TO MOM! ``` - When handling async is was even confusing because the actual error was logged as warning and the retry (which is a good thing) was the error. ``` 13:48:15 WARNING [messenger] An exception occurred while handling message "{class}": OUCH, THAT HURTS! GO TO MOM! 13:48:15 ERROR [messenger] Retrying {class} - retry #1. ``` Now it's must clearer and adds even context like the delay: ``` 16:20:11 ERROR [messenger] Error thrown while handling message {class}. Dispatching for retry #3 using 4000 ms delay. Error: "OUCH, THAT HURTS! GO TO MOM!" ... 16:20:15 CRITICAL [messenger] Error thrown while handling message {class}. Removing from transport after 3 retries. Error: "OUCH, THAT HURTS! GO TO MOM!" ``` Commits ------- 2ac7027 [Messenger] improve logs
dunglas
pushed a commit
that referenced
this pull request
Oct 3, 2019
…lias) This PR was merged into the 4.4 branch. Discussion ---------- [ErrorRenderer] Fix timestamp on logs view | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no <!-- please update src/**/CHANGELOG.md files --> | BC breaks? | no <!-- see https://symfony.com/bc --> | Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tests pass? | yes <!-- please add some, will be required by reviewers --> | Fixed tickets | - | License | MIT | Doc PR | - This syntax raises a php exception : ```php (new \DateTime($log['timestamp']))->format('H:i:s'); ``` ``` <br /> <b>Fatal error</b>: Uncaught Exception: DateTime::__construct(): Failed to parse time string (1565179387) at position 7 (3): Unexpected character in [...][...]:4 Stack trace: #0 [...][...](4): DateTime->__construct('1565179387') #1 {main} thrown in <b>[...][...]</b> on line <b>4</b><br /> ``` Commits ------- a0ad2d0 [ErrorRenderer] Fix timestamp on logs view
dunglas
pushed a commit
that referenced
this pull request
Oct 3, 2019
…dmaicher) This PR was merged into the 4.4 branch. Discussion ---------- [FrameworkBundle] conflict with VarDumper < 4.4 | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - While trying FrameworkBundle 4.4.x-dev I noticed that I was still using VarDumper 4.3 which leads to this error: ``` > app/console cache:clear Fatal error: Uncaught Symfony\Component\ErrorHandler\Exception\ClassNotFoundException: Attempted to load class "ContextualizedDumper" from namespace "Symfony\Component\VarDumper\Dumper". Did you forget a "use" statement for another namespace? in /var/www/x/symfony/app/cache/dev/ContainerB7mbdCh/getDebug_DumpListenerService.php:13 Stack trace: #0 /var/www/x/symfony/app/cache/dev/ContainerB7mbdCh/appAppKernelDevDebugContainer.php(1357): require() #1 /var/www/x/symfony/app/cache/dev/ContainerB7mbdCh/appAppKernelDevDebugContainer.php(2282): ContainerB7mbdCh\appAppKernelDevDebugContainer->load('getDebug_DumpLi...') #2 /var/www/x/symfony/vendor/symfony/event-dispatcher/EventDispatcher.php(275): ContainerB7mbdCh\appAppKernelDevDebugContainer->ContainerB7mbdCh\{closure}() #3 /var/www/x/symfony/vendor/symfony/event-dispatcher/EventDispatcher.php(90): Symfony\Component\EventDispatcher\EventDispatcher->sortListeners('console.command') #4 /var/www/x in /var/www/x/symfony/app/cache/dev/ContainerB7mbdCh/getDebug_DumpListenerService.php on line 13 PHP Fatal error: Uncaught Symfony\Component\ErrorHandler\Exception\ClassNotFoundException: Attempted to load class "ContextualizedDumper" from namespace "Symfony\Component\VarDumper\Dumper". Did you forget a "use" statement for another namespace? in /var/www/x/symfony/app/cache/dev/ContainerB7mbdCh/getDebug_DumpListenerService.php:13 Stack trace: #0 /var/www/x/symfony/app/cache/dev/ContainerB7mbdCh/appAppKernelDevDebugContainer.php(1357): require() #1 /var/www/x/symfony/app/cache/dev/ContainerB7mbdCh/appAppKernelDevDebugContainer.php(2282): ContainerB7mbdCh\appAppKernelDevDebugContainer->load('getDebug_DumpLi...') #2 /var/www/x/symfony/vendor/symfony/event-dispatcher/EventDispatcher.php(275): ContainerB7mbdCh\appAppKernelDevDebugContainer->ContainerB7mbdCh\{closure}() #3 /var/www/x/symfony/vendor/symfony/event-dispatcher/EventDispatcher.php(90): Symfony\Component\EventDispatcher\EventDispatcher->sortListeners('console.command') #4 /var/www/x in /var/www/x/symfony/app/cache/dev/ContainerB7mbdCh/getDebug_DumpListenerService.php on line 13 Script app/console cache:clear handling the post-update-cmd event returned with error code 255 ``` So we need to use `symfony/var-dumper >= 4.4` Commits ------- 9b512c6 [FrameworkBundle] conflict with VarDumper < 4.4
dunglas
pushed a commit
that referenced
this pull request
Oct 27, 2020
…tack() (dunglas)
This PR was merged into the 5.1 branch.
Discussion
----------
[DI] Fix call to sprintf in ServicesConfigurator::stack()
| Q | A
| ------------- | ---
| Branch? | 5.1
| Bug fix? | yes
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets | n/a
| License | MIT
| Doc PR | n/a
This PR fixes a faulty call to `sprintf()` and prevents the following error:
```
Warning: sprintf(): Too few arguments in /Users/dunglas/workspace/activity-pub/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php on line 154
Fatal error: Uncaught Error: Wrong parameters for Symfony\Component\DependencyInjection\Exception\InvalidArgumentException([string $message [, long $code [, Throwable $previous = NULL]]]) in /Users/dunglas/workspace/activity-pub/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php:154 Stack trace: #0 /Users/dunglas/workspace/activity-pub/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php(154): Exception->__construct('', 1, 'api_platform.js...') #1 /Users/dunglas/workspace/activity-pub/src/Bundle/Resources/config/services.php(12): Symfony\Component\DependencyInjection\Loader\Configurator\ServicesConfigurator->stack('api_platform.js...', Array) #2 /Users/dunglas/workspace/activity-pub/vendor/symfony/dependency-injection/Loader/PhpFileLoader.php(50): Symfony\Component\DependencyInjection\Loader\ProtectedPhpFileLoader::Symfony\Component\DependencyInjection\Loader\Configurator\{closure}(Object(Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurat in /Users/dunglas/workspace/activity-pub/vendor/symfony/dependency-injection/Loader/Configurator/ServicesConfigurator.php on line 154
```
Commits
-------
11da9d3 [DI] Fix call to sprintf in ServicesConfigurator::stack()
dunglas
pushed a commit
that referenced
this pull request
Mar 24, 2021
This PR was merged into the 5.3-dev branch. Discussion ---------- [Security] Added debug:firewall command | Q | A | ------------- | --- | Branch? | 5.x | Bug fix? | no | New feature? | yes | Deprecations? | no | Tickets | Fix symfony#39321 | License | MIT | Doc PR | symfony/symfony-docs#14982 | Tags | #SymfonyHackday ### Subtasks - [x] Add list view (for use without arguments) - [x] Add more information to list view - [x] Add detail view (for use with `firewall` argument) - [x] Add more information to detail view table - [x] Add authenticators list - [x] Add event listeners & events (copy from `debug:event-listener`) - [x] Add `--include-listeners` option (default: false) - [x] Add helptext - [x] Add documentation ### Moved outside of current scope - Add allowed badges ### Usage (and example output) for a list `bin/console debug:firewall` ``` Firewalls ========= The following firewalls are defined: -------- Name -------- dev public main -------- // To view details of a specific firewall, re-run this command with a firewall name. (e.g. debug:firewall // main) ``` ### Usage (and example output) for details `bin/console debug:firewall main` ``` Firewall "main" =============== ----------------------- --------------------------------------------------- Option Value ----------------------- --------------------------------------------------- Name main Context main Lazy Yes Stateless No User Checker security.user_checker Provider security.user.provider.concrete.app_user_provider Entry Point App\Security\LoginFormAuthenticator Access Denied URL Access Denied Handler ----------------------- --------------------------------------------------- User switching -------------- ----------- --------------------------------------------------- Option Value ----------- --------------------------------------------------- Parameter test Provider security.user.provider.concrete.app_user_provider User Role ROLE_SWITCH_POSSIBLE ----------- --------------------------------------------------- Event listeners for firewall "main" =================================== "Symfony\Component\Security\Http\Event\LoginSuccessEvent" event --------------------------------------------------------------- ------- -------------------------------------------------------------------------------------------- ---------- Order Callable Priority ------- -------------------------------------------------------------------------------------------- ---------- #1 Symfony\Component\Security\Http\EventListener\UserCheckerListener::postCheckCredentials() 256 #2 Symfony\Component\Security\Http\EventListener\SessionStrategyListener::onSuccessfulLogin() 0 #3 Symfony\Component\Security\Http\EventListener\RememberMeListener::onSuccessfulLogin() 0 #4 App\Security\UpdateLastLogin::__invoke() 0 #5 Symfony\Component\Security\Http\EventListener\PasswordMigratingListener::onLoginSuccess() 0 ------- -------------------------------------------------------------------------------------------- ---------- "Symfony\Component\Security\Http\Event\LogoutEvent" event --------------------------------------------------------- ------- ------------------------------------------------------------------------------------------- ---------- Order Callable Priority ------- ------------------------------------------------------------------------------------------- ---------- #1 Symfony\Component\Security\Http\EventListener\DefaultLogoutListener::onLogout() 64 #2 Symfony\Component\Security\Http\EventListener\SessionLogoutListener::onLogout() 0 #3 Symfony\Component\Security\Http\EventListener\RememberMeLogoutListener::onLogout() 0 #4 Symfony\Component\Security\Http\EventListener\CsrfTokenClearingLogoutListener::onLogout() 0 ------- ------------------------------------------------------------------------------------------- ---------- "Symfony\Component\Security\Http\Event\CheckPassportEvent" event ---------------------------------------------------------------- ------- ------------------------------------------------------------------------------------------ ---------- Order Callable Priority ------- ------------------------------------------------------------------------------------------ ---------- #1 Symfony\Component\Security\Http\EventListener\LoginThrottlingListener::checkPassport() 2080 #2 Symfony\Component\Security\Http\EventListener\UserProviderListener::checkPassport() 2048 #3 Symfony\Component\Security\Http\EventListener\UserProviderListener::checkPassport() 1024 #4 Symfony\Component\Security\Http\EventListener\CsrfProtectionListener::checkPassport() 512 #5 Symfony\Component\Security\Http\EventListener\UserCheckerListener::preCheckCredentials() 256 symfony#6 App\Security\DisallowBannedUsers::__invoke() 0 symfony#7 Symfony\Component\Security\Http\EventListener\CheckCredentialsListener::checkPassport() 0 ------- ------------------------------------------------------------------------------------------ ---------- "Symfony\Component\Security\Http\Event\LoginFailureEvent" event --------------------------------------------------------------- ------- ----------------------------------------------------------------------------------- ---------- Order Callable Priority ------- ----------------------------------------------------------------------------------- ---------- #1 Symfony\Component\Security\Http\EventListener\RememberMeListener::onFailedLogin() 0 ------- ----------------------------------------------------------------------------------- ---------- Authenticators for firewall "main" ================================== // @todo: List authenticator information ``` Commits ------- a9dea1d [Security] Added debug:firewall command
dunglas
pushed a commit
that referenced
this pull request
Jun 1, 2021
…l class_exists() on null (derrabus) This PR was merged into the 4.4 branch. Discussion ---------- [DependencyInjection][ProxyManagerBridge] Don't call class_exists() on null | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | N/A | License | MIT | Doc PR | N/A PHP 8.1 complains if we pass `null` to `class_exists()` or `interface_exists()`: > class_exists(): Passing null to parameter `#1` ($class) of type string is deprecated Commits ------- 88520e5 Don't call class_exists() on null
dunglas
pushed a commit
that referenced
this pull request
Jun 1, 2021
This PR was merged into the 5.2 branch. Discussion ---------- [VarDumper] Don't pass null to parse_url() | Q | A | ------------- | --- | Branch? | 5.2 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | N/A | License | MIT | Doc PR | N/A This PR fixes a deprecation warning on PHP 8.1: > parse_url(): Passing null to parameter `#1` ($url) of type string is deprecated Commits ------- f1de7a0 [VarDumper] Don't pass null to parse_url()
dunglas
pushed a commit
that referenced
this pull request
Jan 11, 2022
…sport (veewee) This PR was merged into the 5.3 branch. Discussion ---------- [Notifier] Use correct factory for the msteams transport | Q | A | ------------- | --- | Branch? | 5.3 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | | License | MIT | Doc PR | Creating a microsoft teams transport through the `Notifier` `Transport::fromDsn()` class results in an exception: ``` PHP Fatal error: Uncaught TypeError: Symfony\Component\Notifier\Bridge\MicrosoftTeams\MicrosoftTeamsTransport::__construct(): Argument #1 ($path) must be of type string, null given, called in /vendor/symfony/notifier/Transport.php on line 186 and defined in /vendor/symfony/microsoft-teams-notifier/MicrosoftTeamsTransport.php:35 Stack trace: * snap * ``` This PR uses the correct ms teams transport factory instead. It is pointed at the `5.3` branch, in which this specific transport was introduced. The error is also there in all versions upwards. See https://github.com/symfony/symfony/blob/6.1/src/Symfony/Component/Notifier/Transport.php#L84 Commits ------- 87edd23 [Notifier] Use correct factory for the msteams transport
dunglas
pushed a commit
that referenced
this pull request
Apr 19, 2022
… AssetsInstallCommand (pavol-tk, GromNaN) This PR was squashed before being merged into the 4.4 branch. Discussion ---------- [FrameworkBundle] Avoid calling rtrim(null, '/') in AssetsInstallCommand | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | License | MIT Avoid following deprecation notice: ``` php.INFO: Deprecated: rtrim(): Passing null to parameter #1 ($string) of type string is deprecated ``` Commits ------- 3d92f98 [FrameworkBundle] Avoid calling rtrim(null, '/') in AssetsInstallCommand
dunglas
pushed a commit
that referenced
this pull request
Apr 19, 2022
… on denormalization (JustDylan23) This PR was squashed before being merged into the 6.0 branch. Discussion ---------- [Serializer] Fix AbstractObjectNormalizer TypeError on denormalization | Q | A | ------------- | --- | Branch? | 6.0 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix symfony#44872 | License | MIT | Doc PR | When using dependency injection to get the serializer (instead of manually instantiating it) the object normalizer that is injected into that serializer throws a value exception when doing denormalizing the following: ```php class ObjectOuter { public ObjectInner $inner; } class ObjectInner { public $foo; } public function testDenormalizeRecursiveWithObjectAttributeWithStringValue() { $extractor = new ReflectionExtractor(); $normalizer = new ObjectNormalizer(null, null, null, $extractor); $serializer = new Serializer([$normalizer]); $obj = $serializer->denormalize(['inner' => 'foo'], ObjectOuter::class); $this->assertInstanceOf(ObjectInner::class, $obj->getInner()); } ``` This throws ```php TypeError: Symfony\Component\Serializer\Normalizer\AbstractNormalizer::prepareForDenormalization(): Argument #1 ($data) must be of type object|array|null, string given, called in /var/www/symfony/vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php on line 368 at vendor/symfony/serializer/Normalizer/AbstractNormalizer.php:299 at Symfony\Component\Serializer\Normalizer\AbstractNormalizer->prepareForDenormalization('test string') (vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:368) at Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->denormalize('test string', 'App\\Entity\\User', null, array('cache_key' => 'c93a6d4efa206ea58a62cc6b7fab8dfb', 'deserialization_path' => 'author')) (vendor/symfony/serializer/Serializer.php:238) at Symfony\Component\Serializer\Serializer->denormalize('test string', 'App\\Entity\\User', null, array('cache_key' => 'c93a6d4efa206ea58a62cc6b7fab8dfb', 'deserialization_path' => 'author')) (vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:559) at Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->validateAndDenormalize(array(object(Type)), 'App\\Entity\\Blog', 'author', 'test string', null, array('cache_key' => '44db5a926a1544b1a8585af40107ca3a', 'deserialization_path' => 'author')) (vendor/symfony/serializer/Normalizer/AbstractObjectNormalizer.php:401) at Symfony\Component\Serializer\Normalizer\AbstractObjectNormalizer->denormalize(array('author' => 'test string'), 'App\\Entity\\Blog', null, array('cache_key' => '44db5a926a1544b1a8585af40107ca3a')) (vendor/symfony/serializer/Serializer.php:238) at Symfony\Component\Serializer\Serializer->denormalize(array('author' => 'test string'), 'App\\Entity\\Blog') (src/Controller/BugReproductionController.php:18) at App\Controller\BugReproductionController->test(object(Serializer)) (vendor/symfony/http-kernel/HttpKernel.php:152) at Symfony\Component\HttpKernel\HttpKernel->handleRaw(object(Request), 1) (vendor/symfony/http-kernel/HttpKernel.php:74) at Symfony\Component\HttpKernel\HttpKernel->handle(object(Request), 1, true) (vendor/symfony/http-kernel/Kernel.php:202) at Symfony\Component\HttpKernel\Kernel->handle(object(Request)) (vendor/symfony/runtime/Runner/Symfony/HttpKernelRunner.php:35) at Symfony\Component\Runtime\Runner\Symfony\HttpKernelRunner->run() (vendor/autoload_runtime.php:29) at require_once('/var/www/symfony/vendor/autoload_runtime.php') (public/index.php:5) ``` Refer to: symfony#44881 for the description. Was in the middle of changing the base branch and accidentally pushed when the branch was deleted. `@fancyweb` I implemented the requested changes Commits ------- 89092ea [Serializer] Fix AbstractObjectNormalizer TypeError on denormalization
dunglas
pushed a commit
that referenced
this pull request
Apr 19, 2022
…s (xesxen) This PR was merged into the 5.4 branch. Discussion ---------- [RateLimiter] Resolve crash on near-round timestamps | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - Occasionally timestamps will be fully round (eg. 1234567890.000000) or close to it (eg. 1234567890.000031). When converting those specific float timestamps to string in SlidingWindow (due to `DateTimeImmutable::createFromFormat`), the number is formatted by PHP without any digits. This causes the resulting value of SlidingWindow::getRetryAfter() to be violated with the boolean value `false`. This patch formats the float to include the decimal digits. ``` Return value of Symfony\Component\RateLimiter\Policy\SlidingWindow::getRetryAfter() must be an instance of DateTimeImmutable, bool returned #0 .../vendor/symfony/rate-limiter/Policy/SlidingWindowLimiter.php(84): Symfony\Component\RateLimiter\Policy\SlidingWindow->getRetryAfter() #1 .../usercode.php(123): Symfony\Component\RateLimiter\Policy\SlidingWindowLimiter->consume(1) ``` Commits ------- 4965952 [RateLimiter] Resolve crash on near-round timestamps
dunglas
pushed a commit
that referenced
this pull request
Apr 19, 2022
… resource (Seldaek) This PR was squashed before being merged into the 4.4 branch. Discussion ---------- [Process] Avoid calling fclose on an already closed resource | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead --> | License | MIT | Doc PR | symfony/symfony-docs#... <!-- required for new features --> I got this in Composer while interrupting an install process with Ctrl-C. ``` PHP Fatal error: Uncaught TypeError: fclose(): supplied resource is not a valid stream resource in /var/www/composer/vendor/symfony/process/Pipes/AbstractPipes.php:50 Stack trace: #0 /var/www/composer/vendor/symfony/process/Pipes/AbstractPipes.php(50): fclose() #1 /var/www/composer/vendor/symfony/process/Pipes/UnixPipes.php(50): Symfony\Component\Process\Pipes\AbstractPipes->close() #2 [internal function]: Symfony\Component\Process\Pipes\UnixPipes->__destruct() #3 {main} thrown in /var/www/composer/vendor/symfony/process/Pipes/AbstractPipes.php on line 50 ``` I am assuming it's due to a process which was not closed properly, which is very likely given we run a bunch of them concurrently.. It's pretty hard to debug as it's also hard to reproduce, so I am not sure what to do except handle this case gracefully in the close/__destruct function and hope that at least lets it clean up processes without crashing this way. Commits ------- a9e43a7 [Process] Avoid calling fclose on an already closed resource
dunglas
pushed a commit
that referenced
this pull request
Apr 19, 2022
…alebedev80) This PR was merged into the 4.4 branch. Discussion ---------- [Cache] Fix connecting to Redis via a socket file | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | symfony#45277 | License | MIT | Doc PR | In the [commit](symfony@99b4885) was done follow changes in Traits/RedisTrait.php(188) Old code: ```$port = $hosts[0]['port'] ?? null;``` New code: ```$port = $hosts[0]['port'] ?? 6379;``` With DSN "redis:///var/run/redis/redis.sock" raise an error: ``` Redis connection "redis:///var/run/redis/redis.sock?dbindex=5" failed: php_network_getaddresses: getaddrinfo failed: Name or service not known ``` Because phpredis doesn't allow socket connections with a port ``` (new Redis)->connect('/var/run/redis/redis.sock', 6379); ``` **Error** ``` PHP Warning: Redis::connect(): php_network_getaddresses: getaddrinfo failed: Name or service not known in /root/test_redis.php on line 5 PHP Fatal error: Uncaught RedisException: php_network_getaddresses: getaddrinfo failed: Name or service not known in /root/test_redis.php:5 Stack trace: #0 /root/test_redis.php(5): Redis->connect() #1 {main} thrown in /root/test_redis.php on line 5 ``` I added additional validation of connection type (by host or socket). Also I fixed condition when RedisSentinel connection call as it supports connections by host only. Commits ------- 214fdd1 [Cache] Fix connecting to Redis via a socket file
dunglas
pushed a commit
that referenced
this pull request
Apr 19, 2022
…se::isNotModified` (HypeMC) This PR was merged into the 4.4 branch. Discussion ---------- [HttpFoundation] Fix PHP 8.1 deprecation in `Response::isNotModified` | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - If an `If-None-Match` header is provided in the request and there's no `ETag` header in the response, the following deprecation notice occurs on PHP 8.1 in `Response::isNotModified`: ``` Deprecated: strncmp(): Passing null to parameter #1 ($string1) of type string is deprecated ``` Commits ------- b909acf [HttpFoundation] Fix PHP 8.1 deprecation in isNotModified
dunglas
pushed a commit
that referenced
this pull request
Sep 17, 2022
…ncoding body for c… (Phillip Look) This PR was merged into the 6.1 branch. Discussion ---------- [HttpClient][WebProfilerBundle] Catch errors when encoding body for c… | Q | A | ------------- | --- | Branch? | 6.1 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | | License | MIT | Doc PR | In Symfony 6.1 a [button to copy a request as a cURL command](symfony#43931) was introduced for the profiler. But if I post a binary file containing null characters using the curl-http-client the `HttpClientDataCollector` throws an error. ``` Warning: Uncaught ValueError: escapeshellarg(): Argument #1 ($arg) must not contain any null bytes ``` My solution is to catch the `ValueError` in this situation and to return `null` as the resulting curl command. Returning `null` seems to be the standard handling for unexpectad values in this data collector. Commits ------- 36e6fa0 [HttpClient][WebProfilerBundle] Catch errors when encoding body for curl command line
dunglas
pushed a commit
that referenced
this pull request
Sep 17, 2022
…tpCache (mpdude) This PR was merged into the 4.4 branch. Discussion ---------- [HttpKernel] Fix a PHP 8.1 deprecation notice in HttpCache | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | | License | MIT | Doc PR | PHP 8.1 may trigger a deprecation notice `PHP Deprecated: abs(): Passing null to parameter #1 ($num) of type int|float is deprecated in .../symfony/http-kernel/HttpCache/HttpCache.php on line 721` The reason is that `$entry->getTtl()` may return `null` for cache entries where no freshness information is present. I think we would err on the safe side by not using stale-while-revalidate behaviour in this case. Commits ------- d0955c2 [HttpKernel] Fix a PHP 8.1 deprecation notice in HttpCache
dunglas
pushed a commit
that referenced
this pull request
Sep 17, 2022
…in `NativeSessionStorage::save()` (chalasr) This PR was merged into the 4.4 branch. Discussion ---------- [HttpFoundation] Fix TypeError on null `$_SESSION` in `NativeSessionStorage::save()` | Q | A | ------------- | --- | Branch? | 4.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - When sending concurrent requests via ajax async to a route pointing to a controller requiring an authenticated user through a stateful - session-based - firewall that calls `SessionInterface::save()`, it happens that `$_SESSION` is `null` under some conditions which causes the following error on PHP 8.1: > Exception 'TypeError' with message 'array_keys(): Argument #1 ($array) must be of type array, null given' in /app/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php:246 …app/vendor/symfony/http-foundation/Session/Storage/NativeSessionStorage.php (246) …age::save called at /app/vendor/symfony/http-foundation/Session/Session.php (198) The issue prevents me from upgrading to PHP 8.1 in a project I'm working on with `@jwage`. Commits ------- 05f3e77 [HttpFoundation] Fix TypeError on null `$_SESSION` in `NativeSessionStorage::save()`
dunglas
pushed a commit
that referenced
this pull request
Nov 14, 2022
…ver with null on non-nullable argument (GromNaN) This PR was merged into the 6.1 branch. Discussion ---------- [HttpKernel] Fix deprecation for DateTimeValueResolver with null on non-nullable argument | Q | A | ------------- | --- | Branch? | 6.1 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | https://github.com/symfony/symfony/pull/48098/files#r1013918566 | License | MIT | Doc PR | n/a Remove deprecation message when the value is `null` and the controller argument is not nullable. ``` Deprecated: DateTimeImmutable::__construct(): Passing null to parameter #1 ($datetime) of type string is deprecated ``` This class have been modified in 6.2. The new test case needs to be updated. Commits ------- 1d7387b Fix deprecation notice when date argument is not nullable and null value is provided
dunglas
pushed a commit
that referenced
this pull request
Mar 11, 2023
…iously defined date attribute to the expected class (GromNaN) This PR was merged into the 6.1 branch. Discussion ---------- [HttpKernel] In DateTimeValueResolver, convert previously defined date attribute to the expected class | Q | A | ------------- | --- | Branch? | 6.1 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | Fix https://github.com/symfony/symfony/pull/48098/files#r1013997729 | License | MIT Convert an instance of `DateTimeInterface` to the expected class if the value was predefined in the request attributes. ```php # in a request listener $request->attributes->set('date', new \DateTimeImmutable()); ``` ```php class MyController { public function index(\DateTime $date) { // Use the $date } } ``` ``` Uncaught TypeError: MyController::index(): Argument #1 ($date) must be of type DateTime, DateTimeImmutable given ``` Commits ------- 22a1567 Convert previously defined date attribute to the expected class
dunglas
pushed a commit
that referenced
this pull request
Mar 11, 2023
…(HypeMC) This PR was merged into the 6.2 branch. Discussion ---------- [HttpKernel] Fix `CacheAttributeListener` priority | Q | A | ------------- | --- | Branch? | 6.2 | Bug fix? | yes | New feature? | no | Deprecations? | no | Tickets | - | License | MIT | Doc PR | - Currently the `CacheAttributeListener` & the `IsGrantedAttributeListener` have the same priority: ``` Registered Listeners for "kernel.controller_arguments" Event ============================================================ ------- --------------------------------------------------------------------------------------------------------- ---------- Order Callable Priority ------- --------------------------------------------------------------------------------------------------------- ---------- #1 Symfony\Component\HttpKernel\EventListener\CacheAttributeListener::onKernelControllerArguments() 10 #2 Symfony\Component\Security\Http\EventListener\IsGrantedAttributeListener::onKernelControllerArguments() 10 #3 Symfony\Component\HttpKernel\EventListener\ErrorListener::onControllerArguments() 0 ------- --------------------------------------------------------------------------------------------------------- ---------- ``` Since the `CacheAttributeListener` is alphabetically first, it's first to get triggered. This can cause an unauthenticated user to receive a 304 Not modified instead of a 302 Redirect, resulting in the user seeing some stale content from when they were authenticated instead of getting redirected to the login page. This PR changes the priority of the `CacheAttributeListener` to be lower than that of the `IsGrantedAttributeListener`. Commits ------- 90eb89f [HttpKernel] Fix CacheAttributeListener priority
dunglas
pushed a commit
that referenced
this pull request
Mar 11, 2023
…ixed attributes (delbertooo)
This PR was submitted for the 6.2 branch but it was merged into the 5.4 branch instead.
Discussion
----------
[FrameworkBundle] Fix denyAccessUnlessGranted for mixed attributes
| Q | A
| ------------- | ---
| Branch? | 5.4
| Bug fix? | yes
| New feature? | no
| Deprecations? |no
| Tickets | -
| License | MIT
| Doc PR | -
Checking authorization against anything that isn't `array|string` will cause PHP errors now. The method `AbstractController::denyAccessUnlessGranted()` sets the given *single* attribute into the exception in case of denied access. The `AuthorizationCheckerInterface` defines that the attribute can be anything, even objects. The parameter type hint `array|string` of `AccessDeniedException::setAttributes()` want's an array of attributes (or a string for convenience).
# Example
```php
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
class MyCustomAttribute
{
}
class ProfileController extends AbstractController
{
public function index(): Response
{
$this->denyAccessUnlessGranted(new MyCustomAttribute()); // 💥 ERROR: Symfony\Component\Security\Core\Exception\AccessDeniedException::setAttributes(): Argument #1 ($attributes) must be of type array|string, [...]
$user = $this->getUser();
return new Response('Well hi there '.$user->getFirstName());
}
}
```
# The fix
As the given attribute is a *single* attribute: always wrap it into an array when creating the exception, because the exception expects an array of attributes.
Commits
-------
9ed77f3 [FrameworkBundle] Fix denyAccessUnlessGranted for mixed attributes
dunglas
pushed a commit
that referenced
this pull request
May 30, 2023
dunglas
pushed a commit
that referenced
this pull request
May 30, 2023
…ring, bool given (danepowell) This PR was merged into the 5.4 branch. Discussion ---------- [Console] trim(): Argument #1 () must be of type string, bool given | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? |no <!-- please update src/**/CHANGELOG.md files --> | Deprecations? |no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files --> | Tickets | Fix #... <!-- prefix each issue number with "Fix #", no need to create an issue if none exists, explain below instead --> | License | MIT | Doc PR | symfony/symfony-docs#... <!-- required for new features --> <!-- Replace this notice by a short README for your feature/bugfix. This will help reviewers and should be a good start for the documentation. Additionally (see https://symfony.com/releases): - Always add tests and ensure they pass. - Bug fixes must be submitted against the lowest maintained branch where they apply (lowest branches are regularly merged to upper ones so they get the fixes too). - Features and deprecations must be submitted against the latest branch. - For new features, provide some code snippets to help understand usage. - Changelog entry should follow https://symfony.com/doc/current/contributing/code/conventions.html#writing-a-changelog-entry - Never break backward compatibility (see https://symfony.com/bc). --> If you run a Symfony Console application in Git Bash, ANSICON is not set out of the box and results in this (suppressed) error: > trim(): Argument ($string) must be of type string, bool given AFAICT, this method is only called from Application::run() and errors are suppressed. So users will never actually see that error. Still, it could have side effects and breaks downstream projects: box-project/box#990 Commits ------- 324b160 trim(): Argument #1 () must be of type string, bool given
dunglas
pushed a commit
that referenced
this pull request
May 30, 2023
* 5.4: trim(): Argument #1 () must be of type string, bool given [Dumper] Trim leading newlines when checking if value begins with a space Fix the list of supported shells for completions in a phar
dunglas
pushed a commit
that referenced
this pull request
May 30, 2023
* 6.2: Fix test class name trim(): Argument #1 () must be of type string, bool given Check if trace.curlCommand is defined in profiler [Dumper] Trim leading newlines when checking if value begins with a space [FrameworkBundle] Make service edges unique Fix the list of supported shells for completions in a phar Fix the usage of the zsh completion through the fpath discovery
dunglas
pushed a commit
that referenced
this pull request
Oct 10, 2024
…nse from transport (ZhukV)
This PR was squashed before being merged into the 6.4 branch.
Discussion
----------
[Notifier][TurboSMS] Process partial accepted response from transport
| Q | A
| ------------- | ---
| Branch? | 6.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Issues | None
| License | MIT
TurboSMS can return `null` as message id, if sms not sent to recipient. Example:
```json
{
"response_code": 802,
"response_status": "SUCCESS_MESSAGE_PARTIAL_ACCEPTED",
"response_result": [
{
"phone": "recipient_1",
"response_code": 406,
"message_id": null,
"response_status": "NOT_ALLOWED_RECIPIENT_COUNTRY"
},
{
"phone": "recipient_2",
"response_code": 0,
"message_id": "f83f8868-5e46-c6cf-e4fb-615e5a293754",
"response_status": "OK"
}
]
}
```
And we receive error:
```
Symfony\Component\Notifier\Message\SentMessage::setMessageId(): Argument #1 ($id) must be of type string, null given, called in /code/vendor/symfony/turbo-sms-notifier/TurboSmsTransport.php on line 93
```
Symfony use only one phone number for sent, as result we check only first `response_result`.
Commits
-------
932dbe3 [Notifier][TurboSMS] Process partial accepted response from transport
dunglas
pushed a commit
that referenced
this pull request
Nov 27, 2024
Without the fix running `SYMFONY_PHPUNIT_SKIPPED_TESTS='phpunit.skipped' php
./phpunit src/Symfony/Component/Lock/Tests/Store/DoctrineDbalPostgreSqlStoreTest.php`
without the pdo_pgsql extension enabled the generated skip file looked like this:
```
<?php return array (
'PHPUnit\\Framework\\DataProviderTestSuite' =>
array (
'Symfony\\Component\\Lock\\Tests\\Store\\DoctrineDbalPostgreSqlStoreTest::testInvalidDriver' => 1,
),
'Symfony\\Component\\Lock\\Tests\\Store\\DoctrineDbalPostgreSqlStoreTest' =>
array (
'testSaveAfterConflict' => 1,
'testWaitAndSaveAfterConflictReleasesLockFromInternalStore' => 1,
'testWaitAndSaveReadAfterConflictReleasesLockFromInternalStore' => 1,
'testSave' => 1,
'testSaveWithDifferentResources' => 1,
'testSaveWithDifferentKeysOnSameResources' => 1,
'testSaveTwice' => 1,
'testDeleteIsolated' => 1,
'testBlockingLocks' => 1,
'testSharedLockReadFirst' => 1,
'testSharedLockWriteFirst' => 1,
'testSharedLockPromote' => 1,
'testSharedLockPromoteAllowed' => 1,
'testSharedLockDemote' => 1,
),
);
```
Thus, running the tests again with the extension enabled would only run 14
tests instead of the expected total number of 16 tests.
With the patch applied the generated skip file looks like this:
```
<?php return array (
'Symfony\\Component\\Lock\\Tests\\Store\\DoctrineDbalPostgreSqlStoreTest' =>
array (
'testInvalidDriver with data set #0' => 1,
'testInvalidDriver with data set #1' => 1,
'testSaveAfterConflict' => 1,
'testWaitAndSaveAfterConflictReleasesLockFromInternalStore' => 1,
'testWaitAndSaveReadAfterConflictReleasesLockFromInternalStore' => 1,
'testSave' => 1,
'testSaveWithDifferentResources' => 1,
'testSaveWithDifferentKeysOnSameResources' => 1,
'testSaveTwice' => 1,
'testDeleteIsolated' => 1,
'testBlockingLocks' => 1,
'testSharedLockReadFirst' => 1,
'testSharedLockWriteFirst' => 1,
'testSharedLockPromote' => 1,
'testSharedLockPromoteAllowed' => 1,
'testSharedLockDemote' => 1,
),
);
```
dunglas
pushed a commit
that referenced
this pull request
Nov 27, 2024
… providers (xabbuh)
This PR was merged into the 5.4 branch.
Discussion
----------
[PhpUnitBridge] fix dumping tests to skip with data providers
| Q | A
| ------------- | ---
| Branch? | 5.4
| Bug fix? | yes
| New feature? | no
| Deprecations? | no
| Issues |
| License | MIT
Without the fix running `SYMFONY_PHPUNIT_SKIPPED_TESTS='phpunit.skipped' php ./phpunit src/Symfony/Component/Lock/Tests/Store/DoctrineDbalPostgreSqlStoreTest.php` without the `pdo_pgsql` extension enabled the generated skip file looked like this:
```
<?php return array (
'PHPUnit\\Framework\\DataProviderTestSuite' =>
array (
'Symfony\\Component\\Lock\\Tests\\Store\\DoctrineDbalPostgreSqlStoreTest::testInvalidDriver' => 1,
),
'Symfony\\Component\\Lock\\Tests\\Store\\DoctrineDbalPostgreSqlStoreTest' =>
array (
'testSaveAfterConflict' => 1,
'testWaitAndSaveAfterConflictReleasesLockFromInternalStore' => 1,
'testWaitAndSaveReadAfterConflictReleasesLockFromInternalStore' => 1,
'testSave' => 1,
'testSaveWithDifferentResources' => 1,
'testSaveWithDifferentKeysOnSameResources' => 1,
'testSaveTwice' => 1,
'testDeleteIsolated' => 1,
'testBlockingLocks' => 1,
'testSharedLockReadFirst' => 1,
'testSharedLockWriteFirst' => 1,
'testSharedLockPromote' => 1,
'testSharedLockPromoteAllowed' => 1,
'testSharedLockDemote' => 1,
),
);
```
Thus, running the tests again with the extension enabled would only run 14 tests instead of the expected total number of 16 tests.
With the patch applied the generated skip file looks like this:
```
<?php return array (
'Symfony\\Component\\Lock\\Tests\\Store\\DoctrineDbalPostgreSqlStoreTest' =>
array (
'testInvalidDriver with data set #0' => 1,
'testInvalidDriver with data set #1' => 1,
'testSaveAfterConflict' => 1,
'testWaitAndSaveAfterConflictReleasesLockFromInternalStore' => 1,
'testWaitAndSaveReadAfterConflictReleasesLockFromInternalStore' => 1,
'testSave' => 1,
'testSaveWithDifferentResources' => 1,
'testSaveWithDifferentKeysOnSameResources' => 1,
'testSaveTwice' => 1,
'testDeleteIsolated' => 1,
'testBlockingLocks' => 1,
'testSharedLockReadFirst' => 1,
'testSharedLockWriteFirst' => 1,
'testSharedLockPromote' => 1,
'testSharedLockPromoteAllowed' => 1,
'testSharedLockDemote' => 1,
),
);
```
Commits
-------
95f41cc fix dumping tests to skip with data providers
dunglas
pushed a commit
that referenced
this pull request
Nov 27, 2024
… not throw exception (lyrixx) This PR was merged into the 5.4 branch. Discussion ---------- [HttpKernel] Ensure `HttpCache::getTraceKey()` does not throw exception | Q | A | ------------- | --- | Branch? | 5.4 | Bug fix? | yes | New feature? | no | Deprecations? | no | Issues | - | License | MIT We have such logs in our logs. It's in our raw PHP logs. They are not caught by monolog, it's too early ``` [11-Oct-2024 01:23:33 UTC] PHP Fatal error: Uncaught Symfony\Component\HttpFoundation\Exception\SuspiciousOperationException: Invalid method override "__CONSTRUCT". in /var/www/redirection.io/backend/blue/vendor/symfony/http-foundation/Request.php:1234 Stack trace: #0 /var/www/redirection.io/backend/blue/vendor/symfony/http-kernel/HttpCache/HttpCache.php(728): Symfony\Component\HttpFoundation\Request->getMethod() #1 /var/www/redirection.io/backend/blue/vendor/symfony/http-kernel/HttpCache/HttpCache.php(207): Symfony\Component\HttpKernel\HttpCache\HttpCache->getTraceKey() #2 /var/www/redirection.io/backend/blue/vendor/symfony/http-kernel/Kernel.php(188): Symfony\Component\HttpKernel\HttpCache\HttpCache->handle() #3 /var/www/redirection.io/backend/blue/web/app.php(9): Symfony\Component\HttpKernel\Kernel->handle() #4 {main} thrown in /var/www/redirection.io/backend/blue/vendor/symfony/http-foundation/Request.php on line 1234 ``` I managed to reproduced locally. * Before the patch, without the http_cache, symfony returns a 405 * After the patch, without the http_cache, symfony returns a 405 * Before the patch, with the http_cache, symfony returns a 500, without any information (too early) * After the patch, with the http_cache, symfony returns a 405 Commits ------- a2ebbe0 [HttpKernel] Ensure HttpCache::getTraceKey() does not throw exception
dunglas
pushed a commit
that referenced
this pull request
Dec 7, 2024
…ctor (MaximePinot)
This PR was merged into the 6.4 branch.
Discussion
----------
[Mime] Fix wrong PHPDoc in `FormDataPart` constructor
| Q | A
| ------------- | ---
| Branch? | 6.4
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Issues | - <!-- prefix each issue number with "Fix #", no need to create an issue if none exists, explain below instead -->
| License | MIT
I believe the PHPDoc is wrong.
As far as I understand, the `FormDataPart` expects instances of `TextPart`:
```php
if (!\is_string($item) && !$item instanceof TextPart) {
throw new InvalidArgumentException(sprintf('The value of the form field "%s" can only be a string, an array, or an instance of TextPart, "%s" given.', $fieldName, get_debug_type($item)));
}
```
https://github.com/symfony/symfony/blob/6.4/src/Symfony/Component/Mime/Part/Multipart/FormDataPart.php#L74
The following code is rejected by PHPStan while it works:
```php
final readonly class Foo
{
public function bar(): void
{
new FormDataPart([
new TextPart('baz'),
]);
}
}
```
```shell
------ -------------------------------------------------------------------------------------------------------------------
Line src/Foo.php
------ -------------------------------------------------------------------------------------------------------------------
14 Parameter #1 $fields of class Symfony\Component\Mime\Part\Multipart\FormDataPart constructor expects
array<array|string|Symfony\Component\Mime\Part\DataPart>, array<int, Symfony\Component\Mime\Part\TextPart> given.
------ -------------------------------------------------------------------------------------------------------------------
```
(cc `@B`-Galati)
Commits
-------
886d4ed [Mime] Fix wrong PHPDoc in `FormDataPart` constructor
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
No description provided.