This PR was squashed before being merged into the 4.1-dev branch (closes#26864).
Discussion
----------
[Messenger] Define multiple buses from the `framework.messenger.buses` configuration
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #26652
| License | MIT
| Doc PR | https://github.com/symfony/symfony-docs/issues/9617
Not everybody will benefit from having only one bus, especially with the CQRS-like usages. While keeping the extremely use of use of the single bus, this PR has the following:
- Create multiple buses from the YAML configuration
- Tag middleware only a specific buses
- Register middlewares from the YAML configuration
Even if it's visible in the PR's tests, here's how it will look like, for a completely full-customised version:
```yaml
framework:
messenger:
default_bus: commands
buses:
commands: ~
events:
middlewares:
- validation
- route_messages
- "Your\\Middleware\\Service"
- call_message_handler
```
A few things to note:
1. The YAML configuration creates `messenger.bus.[name]` services for the buses.
2. The YAML configuration for middleware just adds tags to the corresponding middlewares.
3. If the middleware definition does not exists, it creates it. (without any magic on the arguments though, if it isn't auto-wirable, well... "your problem")
4. In the PR, there is this "TolerateNoHandler" middleware that is a great example for event buses
Commits
-------
e5deb8499b [Messenger] Define multiple buses from the `framework.messenger.buses` configuration
This PR was merged into the 4.1-dev branch.
Discussion
----------
[FrameworkBundle] Register all private services on the test service container
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | -
| License | MIT
| Doc PR | -
Before this fix, only services explicitly configured with public=false were exposed via the test service container:
```php
$container->register(PrivateService::class, PrivateService::class)->setPublic(false);
```
but not those explicitly configured as private:
```php
$container->register(PrivateService::class, PrivateService::class)->setPrivate(true);
```
nor those implicitly configured as private:
```php
$container->register(PrivateService::class, PrivateService::class);
```
Commits
-------
6677393 [FrameworkBundle] Register all private services on the test service container
Before this fix, only services explicitly configured with public=false were exposed via the test service container:
```
$container->register(PrivateService::class, PrivateService::class)->setPublic(false);
```
but not those explicitly configured as private:
```
$container->register(PrivateService::class, PrivateService::class)->setPrivate(true);
```
nor those implicitly configured as private:
```
$container->register(PrivateService::class, PrivateService::class);
```
This PR was merged into the 4.1-dev branch.
Discussion
----------
[Serializer] Allow to access to the context and various other infos in callbacks and max depth handler
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes<!-- don't forget to update src/**/CHANGELOG.md files -->
| BC breaks? | no <!-- see https://symfony.com/bc -->
| 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 <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | todo
Allows to access to the context, format, parent object and attribute name in max depth handlers and callbacks.
ping @meyerbaptiste
Commits
-------
0e5f74071a [Serializer] Allow to access to the context and various other infos in callbacks and max depth handler
This PR was squashed before being merged into the 4.1-dev branch (closes#27001).
Discussion
----------
[Messenger] Typecast the auto-setup as a bool.
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no <!-- don't forget to update src/**/CHANGELOG.md files -->
| BC breaks? | no <!-- see https://symfony.com/bc -->
| 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 | #26996
| License | MIT
| Doc PR |
Commits
-------
566a8be35b [Messenger] Typecast the auto-setup as a bool.
This PR was merged into the 4.1-dev branch.
Discussion
----------
[DI] Handle invalid extension configuration class
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | yes
| Tests pass? | yes <!-- please add some, will be required by reviewers -->
| Fixed tickets | #27040
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
cc @iltar @stof
Commits
-------
5ce90bd251 [DI] Handle invalid bundle configuration class
This PR was merged into the 4.1-dev branch.
Discussion
----------
[MonologBridge] Added WebSubscriberProcessor to ease processor configuration
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
---
Side note: I could be nice to have an interface to act as the marker to AutoConfigure processors
Commits
-------
b1287d65d3 [MonologBridge] Added WebSubscriberProcessor to ease processor configuration
This PR was squashed before being merged into the 4.1-dev branch (closes#26990).
Discussion
----------
declare types in array_map callbacks
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | no
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
This is a continuation of https://github.com/symfony/symfony/pull/26821
Commits
-------
e7d5634cf4 declare types in array_map callbacks
This PR was merged into the 4.1-dev branch.
Discussion
----------
[HttpFoundation] Add HeaderUtils class
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
In several places in HttpFoundation we parse HTTP header values using a variety of regular expressions. Some of them fail in various corner cases.
Parsing HTTP headers is not entirely trivial. We must be able to parse quoted strings with backslash escaping properly and ignore white-space in certain places.
In practice, our limitations in this respect may not be a big problem. We only care about a few different HTTP request headers, and they are usually restricted to a simple values without quoted strings etc. However, this is no excuse for not doing it right :-)
This PR introduces a new utility class for parsing headers. This allows Symfony itself and third-party code to parse HTTP headers in a robust way without using complex regular expressions that are difficult to write and error prone.
Commits
-------
b435e80cae [HttpFoundation] Add HeaderUtility class
This PR was merged into the 4.1-dev branch.
Discussion
----------
[BrowserKit] Bypass Header Informations
This enables browser Testingtools like mink to pass headerfiles while doing a form submit
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
<!--
Write a short README entry for your feature/bugfix here (replace this comment block.)
This will help people understand your PR and can be used as a start of the Doc PR.
Additionally:
- Bug fixes must be submitted against the lowest 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 master branch.
-->
We tried to do some Browsertesting with Mink and Behat, something like:
```gherkin
Scenario Outline: greet in native language
Given the browser language is "<lang>"
And I called the website
When I fill in "PHP" for "username"
And I submit the form
Then I should see "<greeting>"
Examples:
| lang | greeting |
| en | Hello |
| de | Hallo |
| fr | Bonjour |
| zh | 你好 |
| ru | привет |
| be | Bonjour |
```
```php
public function theBrowserLanguageIs($arg1)
{
$this->getSession()->setRequestHeader('Accept', '*/*');
$this->getSession()->setRequestHeader('Accept-Language', $arg1);
}
```
While everything works fine with visit form submit didn't send the headers. At Mink theres also an open issue for that
https://github.com/minkphp/MinkBrowserKitDriver/issues/79
but actually the problem was between the mink browserkit and the symfony client.
Commits
-------
fa2063efe4 [BroserKit] Enable passthrew header information on submit
This PR was merged into the 4.1-dev branch.
Discussion
----------
[Form] Add choice_translation_locale option for Intl choice types
| Q | A
| ------------- | ---
| Branch? | master (4.2)
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | yes
| Tests pass? | yes
| Fixed tickets | #26737
| License | MIT
| Doc PR | symfony/symfony-docs#...
This PR adds possibility to show the list of elements for a custom locale different to the current one and proposes also deprecate the `ChoiceLoaderInterface` implementation from all of them, moving it to a separate class.
See related issue #26737 for full description and use-case.
After:
```php
$formBuilder->add('country', CountryType::class, [
'choice_translation_locale' => 'es',
]);
```
Alternative of https://github.com/symfony/symfony/pull/23629
TODO:
- [x] Update `UPGRADE-*.md` and `src/**/CHANGELOG.md` files.
- [x] Add some tests.
Commits
-------
9592fa64cf moved feature to 4.1
e250dfa702 Add choice_translation_locale option for Intl choice types
This PR was merged into the 4.1-dev branch.
Discussion
----------
Revert the type declaration of Role merged in #26821
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
in #2681 (https://github.com/symfony/symfony/pull/26821/files#diff-5febf3ee0bb2e743b1a929abe55968e8R89)
I added a `Role` type declaration.
But users who had played duck type there could face B.C. break.
So I'd like to revert the change.
Commits
-------
66adc9f1c8 Revert the type declaration for Role, because users might do duck typing.
This PR was merged into the 4.1-dev branch.
Discussion
----------
[DI][FrameworkBundle] Hide service ids that start with a dot
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | yes
| Tests pass? | yes
| Fixed tickets | #26630
| License | MIT
| Doc PR | -
Now that services are private by default, `debug:container` should display them by default.
In fact, the public/private concept should not trigger a difference in visibility for this command.
Instead, I propose to handle service ids that start with a dot as hidden services.
PR should be ready.
(For reference, I tried using a tag instead in #26891, but that doesn't work in practice when working on the implementation.)
Commits
-------
cea051ee5e [DI][FrameworkBundle] Hide service ids that start with a dot
* 4.0:
Fix tests
PropertyInfo\DoctrineExtractor - There is bug when indexBy is meta key
Fix PercentType error rendering.
[minor] SCA
[Cache] Inline some hot function calls
fixed Silex project's URL
fixed deprecations in tests
fixed Twig URL
[Cache] Add missing `@internal` tag on ProxyTrait
fix formatting arguments in plaintext format
Fix PSR exception context key
Don't assume that file binary exists on *nix OS
Fix that ESI/SSI processing can turn a \"private\" response \"public\"
[Form] Fixed trimming choice values
fix rendering exception stack traces
[Routing] Fix loading multiple class annotations for invokable classes
* 3.4:
Fix tests
PropertyInfo\DoctrineExtractor - There is bug when indexBy is meta key
Fix PercentType error rendering.
[minor] SCA
[Cache] Inline some hot function calls
This PR was merged into the 4.1-dev branch.
Discussion
----------
Fix wrong phpdoc
The exception was renamed but the phpdoc not updated. This has no impact on anything (even IDE autocompletion) but looks bad. Here is a fix.
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | no
| BC breaks? | no
| Deprecations? |no
| Tests pass? | yes
| Fixed tickets | none
| License | MIT
| Doc PR | Not needed
Commits
-------
878bc62 Fix wrong phpdoc
This PR was merged into the 4.1-dev branch.
Discussion
----------
[HttpKernel] LoggerDataCollector: splitting logs on different sub-requests
| Q | A
| ------------- | ---
| Branch? | 4.1
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | -
| Fixed tickets | #23620
| License | MIT
| Doc PR | -
This PR fixed performance problem in dev mode and prevent logs serialize several times for each sub-request.
STR:
1) Install any symfony application v2.8-3.4
2) Create a simple page with 20-50 sub-requests and 5k-10k logs
3) Open page in dev mode
**Actual**
- debug toolbar not open (404 not found)
- sets of logs (in the logger debug panel) for different requests are same
- log processing takes about 20-30s
- gc also run about 50% of execution time
**Expected**
- Debug toolbar should be open
- As developer, I want to see in logger panel only those logs that are relevant to the given sub-request
### Profile and performance
Tested on page with 7k logs and 70 sub-request.
Comparison:
- v3.3.5 - this patch: https://blackfire.io/profiles/compare/b1d410b3-c4a7-4778-9b6d-514f72193e28/graph
- v3.3.5 - patch #23644https://blackfire.io/profiles/compare/d0715b04-7834-4981-8da2-9f1dcb2ef90c/graph
Commits
-------
d0cb1de [HttpKernel] LoggerDataCollector: splitting logs on different sub-requests
This PR was submitted for the 3.4 branch but it was merged into the 2.8 branch instead (closes#25841).
Discussion
----------
[DoctrineBridge] Fix bug when indexBy is meta key in PropertyInfo\DoctrineExtractor
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no <!-- don't forget to update UPGRADE-*.md files -->
| Tests pass? | yes
| Fixed tickets | #25834 <!-- #-prefixed issue number(s), if any -->
| License | MIT
@dunglas could you check it?
<!--
- Bug fixes must be submitted against the lowest 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 master branch.
- Replace this comment by a description of what your PR is solving.
-->
Commits
-------
583759f PropertyInfo\DoctrineExtractor - There is bug when indexBy is meta key
This PR was squashed before being merged into the 2.7 branch (closes#26938).
Discussion
----------
[minor] SCA
| Q | A
| ------------- | ---
| Branch? | 2.7
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | n/a
| License | MIT
| Doc PR | n/a
- Control flow tweaks
Commits
-------
877e678 [minor] SCA
This PR was merged into the 3.4 branch.
Discussion
----------
[Cache] Inline some hot function calls
| 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 | -
The Cache component is typically found in critical code paths, let's inline some calls.
I didn't change all calls but only those in potential hot paths.
Submitted against 3.4 to reduce future merge conflicts.
The PR also embeds edge-case behavior fixes for `ChainAdapter`.
Commits
-------
52b4bfc [Cache] Inline some hot function calls
* 3.4:
fixed deprecations in tests
fixed Twig URL
[Cache] Add missing `@internal` tag on ProxyTrait
fix formatting arguments in plaintext format
Fix PSR exception context key
Don't assume that file binary exists on *nix OS
Fix that ESI/SSI processing can turn a \"private\" response \"public\"
[Form] Fixed trimming choice values
fix rendering exception stack traces
[Routing] Fix loading multiple class annotations for invokable classes