This PR was merged into the 4.3-dev branch.
Discussion
----------
[Lock] Added MongoDBStore
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes (requires `ext-mongodb` and `mongodb/mongodb` to test)
| Fixed tickets | #27345
| License | MIT
| Doc PR | symfony/symfony-docs#9807
**Testing caveat**
In order to test this, the test environment needs `ext-mongodb` and `mongodb/mongodb`.
I have both written the test and tested `Symfony\Component\Lock\Store\MongoDbStore` and it does pass in an environment with `ext-mongodb` and `mongodb/mongodb`.
**Description**
We should support Semaphore Locks with a MongoDB back end to allow those that already use MongoDB as a distributed storage engine.
Symfony already partially supports MongoDB for session storage: `Symfony\Component\HttpFoundation\Session\Storage\Handler\MongoDbSessionHandler`
**Example**
```php
$client = new MongoDb\Client();
$store = new Symfony\Component\Lock\Store\MongoDbStore(
$client
array(
'database' => 'my-app',
)
);
$lockFactory = new Symfony\Component\Lock\Factory($store);
$lock = $lockFactory->createLock('my-resource');
```
This is a squashed pull request of https://github.com/symfony/symfony/pull/27346
Commits
-------
9c04639dc3#27345 Added Lock/Store/MongoDbStore
This PR was squashed before being merged into the 3.4 branch (closes#30736).
Discussion
----------
[Validator] Fix annotation default for @Count and @Length
| Q | A
| ------------- | ---
| Branch? | 3.4
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no| Tests pass? | yes <!-- please add some, will be required by reviewers -->
| Fixed tickets | n/a
| License | MIT
| Doc PR | is it worth mentioning?
`Count` and `Length` constraints allow to pass the exact value as the constructor argument when used in code.
```php
new Length(5);
// is same as
new Length(['min' => 5, 'max' => 5]);
```
At the same time when using them as annotations, `@Assert\Length(5)` throws `The options "" do not exist in constraint Symfony\\Component\\Validator\\Constraints\\Length` (fix for ugly exception is proposed in https://github.com/symfony/symfony/pull/30737). This happens because annotation's default value is passed as `value`. Since `Length` does not have a default option, `value` is replaced with `''`.
This PR fixes this inconsistency.
Commits
-------
7bfb8c1a4c [Validator] Fix annotation default for @Count and @Length
This PR was merged into the 4.3-dev branch.
Discussion
----------
[Messenger] Changing message handling log levels to higher levels
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | none
| License | MIT
| Doc PR | not needed
Update log levels so that the user can configure the logger to be notified of errors. This was really an oversight when I originally added the logging.
Cheers!
Commits
-------
9153c48bc4 Changing message handling log levels to higher levels
- Added ability to support `can` methods in the property access
in order to be compatible with PropertyInfo component
which allows for can accessors
Signed-off-by: RJ Garcia <rj@bighead.net>
This PR was merged into the 4.3-dev branch.
Discussion
----------
[HttpClient] use "nyholm/psr7" by default in Psr18Client
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | -
| License | MIT
| Doc PR | -
This makes the factory arguments of `Psr18Client` optional, with a fallback to using `Nyholm\Psr7\Factory\Psr17Factory` when no factories are provided.
Commits
-------
f2222e4bf5 [HttpClient] use "nyholm/psr7" by default in Psr18Client
This PR was merged into the 4.3-dev branch.
Discussion
----------
[HttpClient] correctly clean state on destruct in CurlResponse
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #30753
| License | MIT
| Doc PR | -
On destruct, we ask curl to close the stream once the headers arrived, but we don't silence the "error" this sets in curl. This fixes it.
Commits
-------
332a88c8ce [HttpClient] correctly clean state on destruct in CurlResponse
This PR was merged into the 4.3-dev branch.
Discussion
----------
Add optional parameter `prefetching` for AMQP connection
Add prefetching connection parameter to setup channel prefetch count.
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
When setting up AMQP transport connection, it can be interesting to configure prefetching on a channel, which is not currently possible.
Commits
-------
47777eedd6 Add optional parameter `prefetching` in connection configuration, to setup channel prefetch count
Makes Finder::in() throw a DirectoryNotFoundException instead of an InvalidArgumentException if one of the directories is not found.
This behavior is more consistent with the AccessDeniedException for files which are unreadable due to insufficient permissions.
To keep BC, the new exception class inherits from InvalidArgumentException.
This PR was merged into the 4.3-dev branch.
Discussion
----------
[DI] ServiceProviderInterface, implementation for ServiceLocator
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #25686
| License | MIT
| Doc PR | applicable here?
Implements #25686
Not sure if it needs any additional documentation, @nicolas-grekas?
Commits
-------
aaf5422cfb [DI][Contracts] add and implement ServiceProviderInterface
This PR was squashed before being merged into the 4.3-dev branch (closes#30606).
Discussion
----------
[Validator] allow brackets in the optional query string
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #30603
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
Add the `allowBrackets` option from the Url constraint to allow brackets in the optional query string.
Commits
-------
40dc4c89df [Validator] allow brackets in the optional query string
This PR was merged into the 4.3-dev branch.
Discussion
----------
[Messenger] Add a command to setup transports
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| License | MIT
This PR add a `SetupTransportsCommand` that allow to setup the transports.
Actually the `AMQPTransport` is setup only if debug is enabled. With this PR the new `messenger:setup-transports` will setup all declared transports.
Commits
-------
fbb534a838 [Messenger] Add a command to setup transports
This PR was merged into the 4.3-dev branch.
Discussion
----------
[Mime] Add BodyRendererInterface
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| 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
| License | MIT
| Doc PR | n/a
<!--
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.
-->
Commits
-------
0c9d684d0a [Mime] added BodyRendererInterface
This PR was squashed before being merged into the 4.3-dev branch (closes#30664).
Discussion
----------
[Finder] Get filename without extension
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #30655
| License | MIT
| Doc PR |
Commits
-------
821e55ab80 [Finder] Get filename without extension
This PR was merged into the 4.2 branch.
Discussion
----------
[Cache] Ensure key exists before checking array value
| Q | A
| ------------- | ---
| Branch? | 4.2
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
Without this fix we're getting warnings like
```
PHP Notice: Undefined index: %5BOUR-KEY%5D%5B1%5D in vendor/symfony/cache/Traits/PhpFilesTrait.php on line 136
```
when doing a `$cache->contains()` in some cases. I'm having a lot of trouble tracking down exactly when and where this error will happen and what changes in our app / cache cause it, but this fix seems benign enough that maybe it can be merged without that backstory.
Commits
-------
f8b4adef23 Ensure key exists before checking array value
This PR was merged into the 4.3-dev branch.
Discussion
----------
Alias for each assets package
| Q | A
| ------------- | ---
| Branch? | master <!-- see below -->
| Bug fix? | no
| New feature? | yes <!-- don't forget to update src/**/CHANGELOG.md files -->
| BC breaks? | ? <!-- 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 | <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | <!-- required for new features -->
Add autowiring by type + name on assets packages
```yaml
framework:
assets:
packages:
xxx:
base_urls: 'xxxx'
```
```php
<?php
class MyService
{
private $xxxPackage;
public function __construct(PackageInterface $xxxPackage)
{
$this->xxxPackage = $xxxPackage;
...
}
public function myMethod(): string
{
return $this->xxxPackage->getUrl('some-image.png');
}
}
```
instead of:
```php
<?php
class MyService
{
private $packages;
public function __construct(Packages $packages)
{
$this->packages = $packages;
...
}
public function myMethod(): string
{
return $this->packages->getPackage('xxx')->getUrl('some-image.png');
}
}
```
Commits
-------
e8b9856ec3 Alias for each assets package
This PR was squashed before being merged into the 4.3-dev branch (closes#30706).
Discussion
----------
[PropertyInfo] Add possibility to extract private and protected properties in reflection extractor
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #30248
| License | MIT
| Doc PR | TODO
This PR add the possibility to extract private and protected properties from a class by passing a new argument to the `ReflectionExtractor`
This new argument consist of flag that filters properties, so someone will also be able to use the `ReflectionExtractor` only for private property
```php
new ReflectionExtractor(null, null, null, true, ReflectionExtractor::ALLOW_PRIVATE | ReflectionExtractor::ALLOW_PROTECTED)
```
Flags method was prefered over a list of bool to avoid too many parameters and also be close to the reflection API of PHP
Commits
-------
05e487f3b2 [PropertyInfo] Add possibility to extract private and protected properties in reflection extractor
This PR was merged into the 4.3-dev branch.
Discussion
----------
[DI] Deprecate non-string default envs
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes-ish
| New feature? | yes
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | yes
| Tests pass? | no <!-- please add some, will be required by reviewers -->
| Fixed tickets | #27680, https://github.com/symfony/symfony/pull/27470#discussion_r196678923
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
This is a failing test to further clarify the issues raised in #27680
So given https://github.com/symfony/symfony/issues/27680#issuecomment-399402480
> We should be sure this solves a real-world issue.
I think it solves a real bug :)
Commits
-------
2311437c9f [DI] Deprecate non-string default envs
This PR was merged into the 4.2 branch.
Discussion
----------
[DependencyInjection] Add test asserting service with factory is not tagged
| Q | A
| ------------- | ---
| Branch? | 4.2
| Bug fix? | no
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | n/a
| License | MIT
| Doc PR | n/a
I wrote a test for a scenario that was failing for me on `4.1` branch to find out it's already fixed in 4.2 (which is awesome). Since I already had a test written and couldn't really find a PR in the changelog that could have fixed my issue I figured I'll PR a test, so the behaviour I was expecting won't get broken :)
EDIT: For the record, the issue in 4.1 is: `Symfony\Component\DependencyInjection\Tests\Fixtures\BarInterface` gets tagged due to `_instanceof` which results in it being handed to `Symfony\Component\DependencyInjection\Tests\Fixtures\BarFactory` via `!tagged`. In the end this results in a recursion which is not handled.
Commits
-------
a8e9f4092c Test service with factory is not tagged
This PR was merged into the 4.3-dev branch.
Discussion
----------
[Contracts][EventDispatcher] add EventDispatcherInterface to symfony/contracts and use it where possible
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | -
| License | MIT
| Doc PR | -
This PR adds a new `EventDispatcherInterface` in `Contracts`. This interface contains only one method: `dispatch($event, $eventName)`. That covers almost all use cases of the event dispatcher in components (some use add/removeListeners/Subscribers but they are a minority.)
While doing so, it allows dispatching any objects as events - not only instances of `Event`.
This allows decoupling e.g. `Messenger` from the `EventDispatcher` component.
Next steps could be about planning to remove the base `Event` class from some concrete event classes and/or moving `EventSubscriberInterface` to `symfony/contracts`. It would allow decoupling e.g. `Workflow` from the component - but that's too far away for now, let's think about it in 5.1.
Commits
-------
3c3db2f14a [Contracts][EventDispatcher] add EventDispatcherInterface to symfony/contracts and use it where possible
This PR was merged into the 4.3-dev branch.
Discussion
----------
Fixing bad return on getter
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | none
| License | MIT
| Doc PR | not needed
My bad - this method is only to make the Symfony Serializer happy (not used in our code), so I missed it. Test added to be sure.
Commits
-------
f3b3b2f4f3 Fixing bad return on getter
This PR was merged into the 4.3-dev branch.
Discussion
----------
[Form] TransformationFailedException: Support specifying message to display
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #22501
| License | MIT
| Doc PR | N/A
Currently, a failed transformation can't display a very accurate message, as it only uses the value of the `invalid_message` option. I suggest to add more flexibility, somehow the same way we did for `CustomUserMessageAuthenticationException`.
A test case in `FormTypeTest` shows a use-case based on @webmozart's [blog post about value/immutable objects in Symfony forms](https://webmozart.io/blog/2015/09/09/value-objects-in-symfony-forms/).
~I named the exception properties and methods the same way as for `CustomUserMessageAuthenticationException`, but do you think the followings would be better:~
- ~`setSafeMessage` ➜ `setInvalidMessage`~
- ~`getMessageKey` ➜ `getInvalidMessageKey`~
- ~`getMessageData` ➜ `getInvalidMessageParameters`~
~in order to echoes `invalid_message` and `invalid_message_parameters` options?~
=> Replaced to use `invalidMessage` & `invalidMessageParameters`
Commits
-------
d11055cc1c [Form] TransformationFailedException: Support specifying message to display
This PR was squashed before being merged into the 4.2 branch (closes#30711).
Discussion
----------
[Serializer] Use object class resolver when extracting attributes
| Q | A
| ------------- | ---
| Branch? | 4.2
| Bug fix? | yes
| New feature? | no
| BC breaks? | no (not sure)
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets |
| License | MIT
| Doc PR |
Current ObjectNormalizer was not using the object class resolver when extracting attributes, i found this when trying to refactor api platform normalizers and dealing with doctrine proxy objet having __initialize__ property not wanted cf https://github.com/api-platform/core/pull/2579
I don't think this is BC break, but maybe some people using this object class resolver can get different behavior ?
Commits
-------
1d8b5af3f0 [Serializer] Use object class resolver when extracting attributes