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.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.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 merged into the 4.3-dev branch.
Discussion
----------
[Validator] BIC remove unused sprintf and parameter
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| License | MIT
removed surplus parameter and sprintf as there are no placeholders in message template
Commits
-------
131e495269 [Validator] BIC remove unused sprintf and parameter
This PR was merged into the 4.3-dev branch.
Discussion
----------
Avoid dispatching SendMessageToTransportsEvent on redeliver
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes - I think so
| New feature? | no
| BC breaks? | no (feature only on master)
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | none
| License | MIT
| Doc PR | a lot, soon :)
This purpose of this event is to be a hook when a message is sent to a transport.
If that message is redelivered later, that's not the purpose of this hook (there
are Worker events for that) and could cause problems if the user unknowingly
tries to modify the Envelope in some way, not thinking about how this might
be a redelivery message.
Commits
-------
3ac6bf9f24 Avoid dispatching SendMessageToTransportsEvent on redeliver
This purpose of this event is to be a hook when a message is sent to a transport.
If that message is redelivered later, that's not the purpose of this hook (there
are Worker events for that) and could cause problems if the user unknowingly
tries to modify the Envelope in some way, not thinking about how this might
be a redelivery message.
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
-------
20664caf25 [Messenger] added missing information in messenger logs
This PR was merged into the 4.3-dev branch.
Discussion
----------
[Validator] Add constraint on unique elements collection(Assert\Unique)
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | no <!-- please add some, will be required by reviewers -->
| Fixed tickets | #26535
| License | MIT
| Doc PR | symfony/symfony-docs#... <!-- required for new features -->
<!--
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
-------
d0eb13e55a Rebase and update to latest CS
fc66683cf2 Add UniqueCollection constraint and validator
This PR was merged into the 4.3-dev branch.
Discussion
----------
[Mime] Removed unnecessary strtolower function call
| Q | A
| ------------- | ---
| Branch? | master <!-- see below -->
| Bug fix? | no
| 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 -->
| License | MIT
Commits
-------
94198876d0 [Mime] Removed unnecessary strtolower
This PR was squashed before being merged into the 4.3-dev branch (closes#27684).
Discussion
----------
[FrameworkBundle] Debug container environment variables
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | no
| 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 -->
This PR is an attempt to ease debugging environment variables used by the container. Main purpose is to tell which are missing and show detailed usage information.
![image](https://user-images.githubusercontent.com/1047696/47601226-ae43c480-d9cd-11e8-926b-8c49069189fc.png)
![image](https://user-images.githubusercontent.com/1047696/47601234-d7645500-d9cd-11e8-9e3f-d1c2ad85dbc5.png)
Commits
-------
b813a05aa5 [FrameworkBundle] Debug container environment variables
This PR was merged into the 4.3-dev branch.
Discussion
----------
[Form][Console] Use dumper
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | no
| 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 -->
Continuation of #28898 for `debug:form`
Commits
-------
a94228edba [Form][Console] Use dumper
This PR was merged into the 4.3-dev branch.
Discussion
----------
Fix type hints for email attachments
| 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 | n/a
| License | MIT
| Doc PR | n/a
`createDataPart()` must return a `DataPart` instance, so `attachPart()` must only accept `DataPart` instances and `getAttachments()` is guaranteed to return an array of `DataPart` instances.
Commits
-------
8059c50e75 fixed type hints for email attachments
This PR was squashed before being merged into the 4.3-dev branch (closes#30559).
Discussion
----------
[HttpClient] Parse common API error formats for better exception messages
| Q | A
| ------------- | ---
| Branch? | master <!-- see below -->
| 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?
Use extra details provided by popular error formats following to improve HTTP exception messages.
The following formats are supported:
* Hydra (default in API Platform)
* RFC 7807 (followed by Symfony's [ConstraintViolationListNormalizer](https://github.com/symfony/symfony/blob/master/src/Symfony/Component/Serializer/Normalizer/ConstraintViolationListNormalizer.php) and supported by API Platform and Apigility)
* JSON:API (because it respects the semantic of the RFC 7807)
It allows to write code like the following (here in a test context):
```php
public function testBadRequest()
{
$this->expectException(ClientExceptionInterface::class);
$this->expectExceptionCode(400); // HTTP status code
$this->expectExceptionMessage(<<<ERROR
Validation Failed
users: This collection should contain 1 element or more.
users: The current logged in user must be part of the users owning this resource.
ERROR
);
$response = (HttpClient::create())->request('POST', 'http://example.com/api/projects', [
'json' => [
'name' => 'My project',
],
]);
$response->getContent();
}
```
Port of https://github.com/api-platform/core/pull/2608#issuecomment-472510732.
Commits
-------
96df4464a1 [HttpClient] Parse common API error formats for better exception messages
This PR was squashed before being merged into the 4.3-dev branch (closes#28898).
Discussion
----------
[Console] Add dumper
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no <!-- see https://symfony.com/bc -->
| Deprecations? | no
| Tests pass? | yes <!-- please add some, will be required by reviewers -->
| Fixed tickets | #... <!-- #-prefixed issue number(s), if any -->
| License | MIT
| Doc PR | https://github.com/symfony/symfony-docs/issues/10502
This PR adds a new `Dumper` helper in the Console component. As there are 2 types of dumps
- debug purpose (e.g. `dd()`, `dump()`)
- output purpose (see #24208, #27684)
For the latter we cannot use the global system (debug) dumper, i.e. `VarDumper::dump()`, we need something tied to the current output and dependency free. Here it is:
```php
$io = new SymfonyStyle($input, $output);
$dumper = new Dumper($io);
$io->writeln($dumper([-0.5, 0, 1]));
$io->writeln($dumper(new \stdClass()));
$io->writeln($dumper(123));
$io->writeln($dumper('foo'));
$io->writeln($dumper(null));
$io->writeln($dumper(true));
```
With VarDumper comonent:
![image](https://user-images.githubusercontent.com/1047696/47069483-4cc26f80-d1ef-11e8-902e-2f9b0f040f25.png)
Without:
![image](https://user-images.githubusercontent.com/1047696/47069517-6663b700-d1ef-11e8-9328-ae1db0b83d7e.png)
> https://github.com/symfony/symfony/pull/27684#discussion_r224054237 var-dumper is not a mandatory dep of fwb, can we do without?
Now we can :)
Commits
-------
fc7465c02c [Console] Add dumper
This PR was merged into the 4.3-dev branch.
Discussion
----------
[Messenger] Add a BC layer for the `ConsumeMessagesCommand` arguments
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | yes
| New feature? | no
| BC breaks? | no - removing some
| Deprecations? | yes (files already updated in previous PR)
| Tests pass? | yes
| Fixed tickets | ø
| License | MIT
| Doc PR | ø
Instead of conflicting `symfony/messenger` with an old `symfony/framework-bundle`, let's add a simple BC layer.
Commits
-------
21235310e3 Add a BC layer for the `ConsumeMessagesCommand` arguments