[HttpKernel][Framework] Locale aware services#28929
[HttpKernel][Framework] Locale aware services#28929fabpot merged 1 commit intosymfony:masterfrom neghmurken:feature/locale-aware-services
Conversation
ro0NL
left a comment
There was a problem hiding this comment.
i think this is a nice approach/feature :)
src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/DependencyInjection/RegisterLocaleAwareServicesPass.php
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
ro0NL
left a comment
There was a problem hiding this comment.
the autoconfiguration should also be updated (each service being an instance of LocaleAwareInterface should get the locale_aware tag automatically.
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/Tests/EventListener/LocaleAwareListenerTest.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml
Outdated
Show resolved
Hide resolved
src/Symfony/Bundle/FrameworkBundle/Resources/config/translation.xml
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/TranslatorListener.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/Tests/EventListener/LocaleAwareListenerTest.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/Tests/EventListener/LocaleAwareListenerTest.php
Outdated
Show resolved
Hide resolved
|
curious.. what about using the existing cc @stof |
|
@neghmurken this is an interesting proposal! Thanks for contributing it. If this is decided to be merged, we'd need some examples of how can we use this new feature in practice (inside a Symfony app and/or as a stand-alone component). If this feature improves an existing feature, please show a before/after example. Thanks a lot! |
nicolas-grekas
left a comment
There was a problem hiding this comment.
I'm mixed here:
- on one side this is very pragmatic;
- on the other side, this is building on top of service mutation - while services should be stateless.
I'd very prefer we could think about a stateless approach instead.
src/Symfony/Component/HttpKernel/DependencyInjection/RegisterLocaleAwareServicesPass.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/DependencyInjection/RegisterLocaleAwareServicesPass.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
…Interface (nicolas-grekas) This PR was merged into the 4.2 branch. Discussion ---------- [Contracts] extract LocaleAwareInterface out of TranslatorInterface | Q | A | ------------- | --- | Branch? | 4.2 | Bug fix? | yes | New feature? | no | BC breaks? | yes | Deprecations? | no | Tests pass? | yes | Fixed tickets | - | License | MIT | Doc PR | - While reviewing #28929, I realized we have a design issue in the Translation contract: we missed segregating `setLocale()`/`getLocale()` out of `TranslatorInterface`. E.g. when people type-hint for `TranslatorInterface`, they *should not* be auto-suggested with the `setLocale()` mutator. Technically, that's a BC break. I think we should do it. The release is close enough in time and that will save us from maintenance issues this will create in the future otherwise. Commits ------- 73e4a1a [Contracts] extract LocaleAwareInterface out of TranslatorInterface
|
I completely swapped my mind here and actually, we merged Would you mind rebasing, please? |
nicolas-grekas
left a comment
There was a problem hiding this comment.
thanks, here are some comments to help move forward.
src/Symfony/Bundle/FrameworkBundle/Resources/config/services.xml
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/DependencyInjection/RegisterLocaleAwareServicesPass.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/DependencyInjection/RegisterLocaleAwareServicesPass.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/TranslatorListener.php
Outdated
Show resolved
Hide resolved
|
Small rebase needed + lowest version of httpkernel should be bumped in framework bundle to make tests pass. |
src/Symfony/Component/HttpKernel/DependencyInjection/RegisterLocaleAwareServicesPass.php
Outdated
Show resolved
Hide resolved
| <argument type="service" id="Psr\Container\ContainerInterface" /> | ||
| </service> | ||
|
|
||
| <service id="translator_listener" class="Symfony\Component\HttpKernel\EventListener\TranslatorListener"> |
There was a problem hiding this comment.
Should we deprecate the service instead in case someone is relying on its presence?
There was a problem hiding this comment.
How can we deprecate without it conflicting with the new LocaleAwareListener ?
There was a problem hiding this comment.
Does it do any harm if both listeners are executed?
There was a problem hiding this comment.
Yeah you're right. There is no undesirable side effect beside setting the locale twice
There was a problem hiding this comment.
I removed the translator_listener service completely as keeping it would trigger deprecation notices. I don't think that's an issue.
xabbuh
left a comment
There was a problem hiding this comment.
looks good apart from a few remaining minor comments
src/Symfony/Component/HttpKernel/EventListener/LocaleAwareListener.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/EventListener/TranslatorListener.php
Outdated
Show resolved
Hide resolved
...mfony/Component/HttpKernel/Tests/DependencyInjection/RegisterLocaleAwareServicesPassTest.php
Outdated
Show resolved
Hide resolved
src/Symfony/Component/HttpKernel/Tests/EventListener/LocaleAwareListenerTest.php
Outdated
Show resolved
Hide resolved
|
Thank you @neghmurken. |
…ken) This PR was merged into the 4.3-dev branch. Discussion ---------- [HttpKernel][Framework] Locale aware services | Q | A | ------------- | --- | Branch? | master | Bug fix? | no | New feature? | yes | BC breaks? | no | Deprecations? | yes | Tests pass? | yes | Fixed tickets | | License | MIT | Doc PR | Added a `LocaleAwareInterface` (and also a new service tag `kernel.locale_aware`) to be implemented on services that require the current locale at request time. Also, refactored the actual Translator service to implement the overmentioned interface Todo : * [ ] Documention PR (will be written after some feedback) Commits ------- b9ac645 Locale aware service registration
|
Hello @neghmurken, @nicolas-grekas My usecase:
In the if I pasted, during the This was not mentionned in the changelog and looks like a BC break (and a bug?) to me. Am I missing something? Thanks for your insights! |
|
@winzou Would you mind opening a new issue with your insights? Otherwise I am afraid that your input is likely to get lost. |
Added a
LocaleAwareInterface(and also a new service tagkernel.locale_aware) to be implemented on services that require the current locale at request time.Also, refactored the actual Translator service to implement the overmentioned interface
Todo :