This PR was squashed before being merged into the 3.4 branch (closes#32025).
Discussion
----------
SimpleCacheAdapter fails to cache any item if a namespace is used
| Q | A
| ------------- | ---
| Branch? |3.4
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| License | MIT
This is a backport of #32019
The SimpleCacheAdapter extends AdapterTestCase.
When adding a namespace, the AdapterTestCase adds ":" after the namespace:
https://github.com/symfony/symfony/blob/v4.3.1/src/Symfony/Component/Cache/Adapter/AbstractAdapter.php#L37
The namespace is prepended to the cache key.
But in PSR-16, the ":" is a forbidden character.
As a result, the cache key is invalid and cache is not persisted. If you use Psr16Adapter + a namespace, the cache simply does not work.
As per @nicolas-grekas advices, a NS_SEPARATOR const is added to change the namespace separator for the `SimpleCacheAdapter` to "_" (that is compatible with PSR-16).
The first commit of this PR starts with an additional test and no fix (to showcase the problem).
Commits
-------
ffd3469ddf SimpleCacheAdapter fails to cache any item if a namespace is used
This PR was merged into the 4.4 branch.
Discussion
----------
[Validator] Deprecate unused arg in ExpressionValidator
| Q | A
| ------------- | ---
| Branch? | 4.4 <!-- see below -->
| Bug fix? | no
| New feature? | no <!-- please update src/**/CHANGELOG.md files -->
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | yes <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tests pass? | yes <!-- please add some, will be required by reviewers -->
| Fixed tickets | N/A <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | N/A <!-- required for new features -->
Time to deprecate this unused first argument?
Commits
-------
0c0978cd47 [Validator] Deprecate unused arg in ExpressionValidator
This PR was merged into the 4.3 branch.
Discussion
----------
[HttpClient] Don't use CurlHttpClient on Windows when curl.cainfo is not set
| Q | A
| ------------- | ---
| Branch? | 4.3
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | -
| License | MIT
| Doc PR | -
On Windows, curl has no cabundle configured by default.
Commits
-------
a2960a3318 [HttpClient] Don't use CurlHttpClient on Windows when curl.cainfo is not set
This PR was squashed before being merged into the 4.4 branch (closes#31287).
Discussion
----------
[Config] Introduce find method in ArrayNodeDefinition to ease configuration tree manipulation
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | yes
| 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 | #27534 <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | tbd.
### Description
This PR introduces a new `find(string $nodePath)`method in the `ArrayNodeDefinition` class, which helps you finding the right node to prepend configuration to ease configuration tree manipulation.
### How to use it
```php
class Configuration implements ConfigurationInterface
{
public function getConfigTreeBuilder()
{
...
$rootNode
->children()
->arrayNode('social_media_channels')
->children()
->booleanNode('enable')->end()
->arrayNode('twitter')->end()
->arrayNode('facebook')->end()
->arrayNode('instagram')->end()
->end()
->end()
->end()
;
$this->changeSocialMediaChannelConfiguration($rootNode->find('social_media_channels.enable'));
$this->addTwitterConfiguration($rootNode->find('social_media_channels.twitter'));
$this->addFacebookConfiguration($rootNode->find('social_media_channels.facebook'));
$this->addInstagramConfiguration($rootNode->find('social_media_channels.instagram'));
return $treeBuilder;
}
private function changeSocialMediaChannelConfiguration(NodeDefinition $node)
{
$node
->defaultTrue()
;
}
private function addTwitterConfiguration(NodeDefinition $node)
{
$node
->children()
->integerNode('client_id')->end()
->scalarNode('client_secret')->end()
->end()
;
}
private function addFacebookConfiguration(NodeDefinition $node)
{
$node
->children()
->integerNode('client_id')->end()
->scalarNode('client_secret')->end()
->end()
;
}
private function addInstagramConfiguration(NodeDefinition $node)
{
$node
->children()
->integerNode('client_id')->end()
->scalarNode('client_secret')->end()
->end()
;
}
}
```
Commits
-------
e3b248aee0 [Config] Introduce find method in ArrayNodeDefinition to ease configuration tree manipulation
This PR was merged into the 3.4 branch.
Discussion
----------
[Form] validate composite constraints in all groups
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #31990
| License | MIT
| Doc PR |
Commits
-------
94ded00216 validate composite constraints in all groups
This PR was squashed before being merged into the 3.4 branch (closes#32007).
Discussion
----------
[Serializer] Handle true and false appropriately in CSV encoder
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #27642
| License | MIT
| Doc PR | -
Previously, if `true` was passed in as a value to the CSV encoder then `fputcsv()` would correctly treat it as 1. However, if `false` was passed in, it would be treated as a blank value. `null` would also be treated as a blank value.
This fix makes it consistent so that true and false will map to 1 and 0, while null maps to an empty string.
Commits
-------
89cba00c68 [Serializer] Handle true and false appropriately in CSV encoder
This PR was squashed before being merged into the 4.4 branch (closes#31959).
Discussion
----------
[DomCrawler][Feature][DX] Add Form::getName() method
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | None
| License | MIT
| Doc PR | symfony/symfony-docs#11705
The PR adds `Symfony\Component\DomCrawler\Form::getName` method.
The method is actually a syntax sugar but can improve DX when dealing with tests. For example, in the snippet
```php
$client = static::createClient();
$crawler = $client->request('GET', '/post/hello-world');
$form = $crawler->selectButton('submit')->form();
$form['my_form[name]'] = 'Fabien';
$form['my_form[subject]'] = 'Symfony rocks!';
```
the prefix in field name (`my_form`) is form name, which is generated by Symfony automatically. The method, added in the PR helps to get that name in a most obvious way.
Commits
-------
ff53cb462a [DomCrawler][Feature][DX] Add Form::getName() method
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
-------
2ac7027b71 [Messenger] improve logs
This PR was merged into the 4.3 branch.
Discussion
----------
Parameterize Mailgun's region
| Q | A
| ------------- | ---
| Branch? | 4.3
| Bug fix? | yes
| New feature? | no
| BC breaks? | yes
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #31810
| License | MIT
| Doc PR | TODO
Mailgun is available in 2 regions (US and EU), when registering a custom domain, users can choose one of the 2 regions and **have to** use the right the endpoint (see documentation https://documentation.mailgun.com/en/latest/api-intro.html?highlight=smtp.mailgun.org#mailgun-regions).
This PR make the endpoint/region configurable.
Commits
-------
7439c8de55 Parameterize Mailgun's region
This PR was merged into the 3.4 branch.
Discussion
----------
[Routing] fix absolute url generation when scheme is not known
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| 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 | #25491
| License | MIT
| Doc PR |
This fixes two edge cases in the url generator:
1. when the context scheme is not known (empty) generating an absolute url would return an invalid url starting with `://host/path`. #25491 handled the case when the host is unknown which makes sense. but the way it was done, created this new problem.
2. non-http(s) urls do not require a host. e.g. typical `file:///path` urls. url generator is fixed to be in line with rfc3986
Commits
-------
8e04222976 [Routing] fix absolute url generation when scheme is not known
This PR was merged into the 4.3 branch.
Discussion
----------
Add statement to fileLink to ignore href code when no fileLink.
| Q | A
| ------------- | ---
| Branch? | 4.3 <!-- see below -->
| 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 | #... <!-- #-prefixed issue number(s), if any -->
| 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 people
understand your PR and can be used as a start for the documentation.
Additionally (see https://symfony.com/roadmap):
- 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 branch 4.4.
- Legacy code removals go to the master branch.
-->
This fix add statement to `\Symfony\Bundle\FrameworkBundle\Console\Descriptor\TextDescriptor::formatControllerLink` to fix display bug.
**Before**
![image](https://user-images.githubusercontent.com/23213308/59355771-ed8a1000-8d27-11e9-998f-fa2fc34edd62.png)
**After**
![image](https://user-images.githubusercontent.com/23213308/59355785-f2e75a80-8d27-11e9-953b-7523e0c9ad35.png)
Commits
-------
b9eab42823 Add statement to fileLink to ignore href code when no fileLink.
This PR was merged into the 4.4 branch.
Discussion
----------
[VarDumper] caster for HttpClient's response dumps all info
| Q | A
| ------------- | ---
| Branch? | 4.4
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | -
| License | MIT
| Doc PR | -
No need to dump the internal structure for responses IMHO, here is a caster that dumps the info instead:
![image](https://user-images.githubusercontent.com/243674/59434490-efb5a280-8deb-11e9-8714-5f1ccbc208b1.png)
Commits
-------
2b268379f5 [VarDumper] caster for HttpClient's response dumps all info
This PR was merged into the 3.4 branch.
Discussion
----------
[VarDumper] fix dumping objects that implement __debugInfo()
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | -
| License | MIT
| Doc PR | -
Right now it fails if the return value is not an array + it doesn't dump the original details from the object's internals.
Commits
-------
a9d0038ec0 [VarDumper] fix dumping objects that implement __debugInfo()
This PR was submitted for the 4.3 branch but it was merged into the 3.4 branch instead (closes#32006).
Discussion
----------
Fix binary operation `+`, `-` or `*` on string by type casting to integer
| Q | A
| ------------- | ---
| Branch? | 4.3 for bug fixes <!-- see below -->
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| License | MIT
# Description
After playing around with [PHPStan](https://github.com/phpstan/phpstan) I found potential improvements when we try to add, subtract or multiply on a string by type casting these values to integers. PHPStan has 8 different [levels](https://github.com/phpstan/phpstan#rule-levels) of strictness and these errors come up after level 2.
## Screenshot example
### Old ⛔️
<img width="876" alt="Screenshot 2019-06-12 at 11 49 22" src="https://user-images.githubusercontent.com/34915382/59435551-2bea0280-8dee-11e9-8eb2-954d34973382.png">
### New ✅
<img width="876" alt="Screenshot 2019-06-12 at 11 48 54" src="https://user-images.githubusercontent.com/34915382/59435562-30aeb680-8dee-11e9-806d-d37985096363.png">
## How to test
1. Require PHPStan in [Composer](https://getcomposer.org/):
```
composer require --dev phpstan/phpstan
```
2. Create the following `phpstan.neon` [config](https://github.com/phpstan/phpstan#configuration) file:
```
parameters:
excludes_analyse:
- 'src/Symfony/Component/Form/Tests'
- 'src/Symfony/Component/Cache/Tests'
- 'src/Symfony/Component/DomCrawler/Tests'
- 'src/Symfony/Component/HttpKernel/Tests'
- 'src/Symfony/Component/PropertyAccess/Tests'
- 'src/Symfony/Component/Routing/Tests'
- 'src/Symfony/Component/Validator/Tests'
- 'src/Symfony/Component/HttpKernel/Tests'
```
3. Comment out line 202-204 of the following file:
```
src/Symfony/Component/HttpKernel/Tests/Controller/ControllerResolverTest.php
```
4. Analyse the project and search for binary operation errors by running:
```
vendor/bin/phpstan analyse src --level 2 -c phpstan.neon | grep --context=5 "Binary operation"
```
> Keep in mind that four errors will still popup. Three are for `+=` or `+` on arrays and the other one is about `.` between an interface and empty array which in my opinion can't be improved.
Commits
-------
d445465ef4 Fix binary operation `+`, `-` or `*` on string
* 4.4:
fixed CS
fixed CS
fixed CS
fixed CS
Do not log or call the proxy function when the locale is the same
Added missing required dependencies on psr/cache and psr/container in symfony/cache-contracts and symfony/service-contracts respectively.
[HttpClient] fix closing debug stream prematurely
[Mailer] made code more robust
Restore compatibility with php 5.5
fixed sender/recipients in SMTP Envelope
collect called listeners information only once
[HttpClient] add HttplugClient for compat with libs that need httplug v1 or v2
[HttpKernel] Remove TestEventDispatcher.
* 4.3:
fixed CS
fixed CS
fixed CS
Do not log or call the proxy function when the locale is the same
Added missing required dependencies on psr/cache and psr/container in symfony/cache-contracts and symfony/service-contracts respectively.
[HttpClient] fix closing debug stream prematurely
[Mailer] made code more robust
Restore compatibility with php 5.5
fixed sender/recipients in SMTP Envelope
collect called listeners information only once
[HttpKernel] Remove TestEventDispatcher.
This PR was merged into the 3.4 branch.
Discussion
----------
CS fixes native functions
| Q | A
| ------------- | ---
| Branch? | 3.4
| 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 | n/a
| License | MIT
| Doc PR | n/a
<!--
Replace this notice by a short README for your feature/bugfix. This will help people
understand your PR and can be used as a start for the documentation.
Additionally (see https://symfony.com/roadmap):
- 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 branch 4.4.
- Legacy code removals go to the master branch.
-->
Commits
-------
106b348d3d fixed CS
This PR was squashed before being merged into the 4.3 branch (closes#32014).
Discussion
----------
Do not log or call the proxy function when the locale is the same
| Q | A
| ------------- | ---
| Branch? | 4.3
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| License | MIT
I was the one creating the PR for logging the change of the locale but ATM I am filled with logs of translator about switching the locale from "en" to "en".. Not sure why.
Commits
-------
31bdfb372c Do not log or call the proxy function when the locale is the same