Commit Graph

1902 Commits

Author SHA1 Message Date
Alexander M. Turek
48a191ca5f Merge branch '5.2' into 5.x
* 5.2:
  [WebProfiler] Use ControllerReference instead of URL in twig render()
  [Serializer][Validator] Update some phpDoc relative to "getters"
  Update README.md
  [SecurityBundle] Empty line starting with dash under "access_control" causes all rules to be skipped
  [Cache] Apply NullAdapter as Null Object
2021-04-13 16:18:23 +02:00
Alexander M. Turek
255283cb24 Merge branch '4.4' into 5.2
* 4.4:
  [Serializer][Validator] Update some phpDoc relative to "getters"
  Update README.md
  [SecurityBundle] Empty line starting with dash under "access_control" causes all rules to be skipped
  [Cache] Apply NullAdapter as Null Object
2021-04-13 16:17:49 +02:00
Guilliam Xavier
5046500deb [Serializer][Validator] Update some phpDoc relative to "getters" 2021-04-13 08:32:41 +02:00
Robin Chalas
251ce63347 Merge branch '5.2' into 5.x
* 5.2:
  [PHPDoc] Fix some union type cases
2021-04-08 12:31:48 +02:00
Robin Chalas
59f97179e8 Merge branch '4.4' into 5.2
* 4.4:
  [PHPDoc] Fix some union type cases
2021-04-08 12:27:02 +02:00
Nyholm
e2f430dfb4
minor #40728 [PHPDoc] Fix some union type cases (fancyweb)
This PR was merged into the 4.4 branch.

Discussion
----------

[PHPDoc] Fix some union type cases

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | no
| New feature?  | no
| Deprecations? | no
| Tickets       | -
| License       | MIT
| Doc PR        | -

While working on https://github.com/symfony/symfony/issues/40154, I discovered some PHPDoc issues, I'm going to comment in the review. Upper branches will need some fixes too.

Commits
-------

dd1481642b [PHPDoc] Fix some union type cases
2021-04-08 09:40:10 +02:00
Fabien Potencier
30b73c7575 feature #40710 [Serializer] Construct annotations using named arguments (derrabus)
This PR was merged into the 5.3-dev branch.

Discussion
----------

[Serializer] Construct annotations using named arguments

| Q             | A
| ------------- | ---
| Branch?       | 5.x
| Bug fix?      | no
| New feature?  | no
| Deprecations? | yes
| Tickets       | N/A
| License       | MIT
| Doc PR        | Not needed

This is the same as #40266, but applied to the serializer annotations.

This PR proposes to bump the `doctrine/annotations` library to 1.12 to gain access to its emulation layer for named arguments. Furthermore, constructing any of the serializer's annotation classes the old way by passing an array of parameters is deprecated.

### Reasons for this change

The constructors of our annotation classes have become unnecessarily complicated because we have to support two ways of calling them:
* An array of parameters, passed as first argument, because that's the default behavior `doctrine/annotations`.
* A set of named arguments because that's how PHP 8 attributes work.

Since we can now tell the Doctrine annotation reader to use named arguments as well, we can simplify the constructors of our annotations significantly.

### Drawback

After this change, there is no easy way anymore to construct instances of most of the annotation classes directly on PHP 7. The PR has been built under the assumption that instances of this class are usually created using either Doctrine annotations or a PHP 8 attribute. Thus, most applications should be unaffected by this change.

Commits
-------

c11666264d [Serializer] Construct annotations using named arguments
2021-04-08 08:57:14 +02:00
Thomas Calvet
dd1481642b [PHPDoc] Fix some union type cases 2021-04-07 18:22:29 +02:00
Alexander M. Turek
855aab243d Merge branch '5.2' into 5.x
* 5.2:
  [CS] Replace easy occurences of ?: with ??
2021-04-07 18:09:00 +02:00
Alexander M. Turek
b64ae4d419 Merge branch '4.4' into 5.2
* 4.4:
  [CS] Replace easy occurences of ?: with ??
2021-04-07 18:07:52 +02:00
Thomas Calvet
959d3d976c [CS] Replace easy occurences of ?: with ?? 2021-04-07 17:47:03 +02:00
Alexander M. Turek
c11666264d [Serializer] Construct annotations using named arguments 2021-04-05 19:03:11 +02:00
Nicolas Grekas
3f0f21c361 Merge branch '5.2' into 5.x
* 5.2:
  fixed parser
  Fixed bugs found by psalm
  [FrameworkBundle] Dont store cache misses on warmup
  fix test
  Update references to the ContainerConfigurator
  [Translation] Remove file added back from a bad merge
  Fix sleep value
  [Cache] skip storing failure-to-save as misses in ArrayAdapter
  [Validator] Delete obsolete statement in Regex::getHtmlPattern() phpDoc
  [FrameworkBundle] Remove author comments for configuration and extension
  [Stopwatch] Document new "name" property of StopwatchEvent
  [DependencyInjection] Fix "url" env var processor behavior when the url has no path
  Fixed support for nodes not extending BaseNode
  [FrameworkBundle] dont access the container to configure http_cache
  add missing queue_name to find(id) in doctrine messenger transport
  [Config][FrameworkBundle] Hint to use PHP 8+ or to install Annotations to use attributes/annots
  [Serializer] AbstractNormalizer force null for non-optional nullable constructor parameter denormalization when not present in input
2021-04-01 12:43:52 +02:00
Nicolas Grekas
b5d1cbcd97 Merge branch '4.4' into 5.2
* 4.4:
  fixed parser
  Fixed bugs found by psalm
  [FrameworkBundle] Dont store cache misses on warmup
  [Cache] skip storing failure-to-save as misses in ArrayAdapter
  [Validator] Delete obsolete statement in Regex::getHtmlPattern() phpDoc
  [FrameworkBundle] Remove author comments for configuration and extension
  [DependencyInjection] Fix "url" env var processor behavior when the url has no path
  Fixed support for nodes not extending BaseNode
  add missing queue_name to find(id) in doctrine messenger transport
  [Serializer] AbstractNormalizer force null for non-optional nullable constructor parameter denormalization when not present in input
2021-04-01 12:42:13 +02:00
Fabien Potencier
84bbfb36c9 Fix CS 2021-03-28 08:39:13 +02:00
Kévin Dunglas
af6f3c2c08
[Config][FrameworkBundle] Hint to use PHP 8+ or to install Annotations to use attributes/annots 2021-03-25 18:38:58 +01:00
Matěj Humpál
1ba6a2cf50
[Serializer] Nicer ExtraAttributesException message for single attribute 2021-03-25 18:21:49 +01:00
Pierre Rineau
d29e433ae8 [Serializer] AbstractNormalizer force null for non-optional nullable constructor parameter denormalization when not present in input 2021-03-22 17:47:33 +01:00
Romain
20f03677e3 [Serializer] Add a Custom End Of Line in CSV File 2021-03-19 11:55:40 +01:00
Nicolas Grekas
6fe82d8be7 Deprecate configuring tag names and service ids in compiler passes 2021-03-15 19:33:21 +01:00
Alexander M. Turek
a8a0650161 Merge branch '5.2' into 5.x
* 5.2:
  [Messenger][SQS] Document missing option
  Specify that we run CI on Ubuntu-20.04
  zero parts can be omitted in date interval input
2021-03-02 13:23:03 +01:00
Alexander M. Turek
5985199754 Merge branch '4.4' into 5.2
* 4.4:
  Specify that we run CI on Ubuntu-20.04
  zero parts can be omitted in date interval input
2021-03-02 13:14:02 +01:00
Christian Flothmann
c316708669 zero parts can be omitted in date interval input 2021-02-26 13:02:03 +01:00
Thomas Calvet
223421b6ca [Uid] Add Generate and Inspect commands
Co-authored-by: Nicolas Grekas <nicolas.grekas@gmail.com>
2021-02-24 18:32:23 +01:00
Fabien Potencier
e2b1d9cd5a feature #39399 [Serializer] Allow to provide (de)normalization context in mapping (ogizanagi)
This PR was squashed before being merged into the 5.3-dev branch.

Discussion
----------

[Serializer] Allow to provide (de)normalization context in mapping

| Q             | A
| ------------- | ---
| Branch?       | 5.x
| Bug fix?      | no
| New feature?  | yes <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | Fix #39039 <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | TODO <!-- required for new features -->

As explained in the linked feature request, this brings the ability to configure context on a per-property basis, using Serializer mapping.

Considering:

```php
use Symfony\Component\Serializer\Annotation as Serializer;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;

class Foo
{
    /**
     * @Serializer\Context({ DateTimeNormalizer::FORMAT_KEY = 'Y-m-d' })
     */
    public \DateTime $date;

    public \DateTime $anotherDate;
}
```

`$date` will be formatted with a specific format, while `$anotherDate` will use the default configured one (or the one provided in the context while calling `->serialize()` / `->normalize()`).

It can also differentiate normalization and denormalization contexts:

```php
use Symfony\Component\Serializer\Annotation as Serializer;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;

class Foo
{
    /**
     * @Serializer\Context(
     *   normalizationContext = { DateTimeNormalizer::FORMAT_KEY = 'Y-m-d' },
     *   denormalizationContext = { DateTimeNormalizer::FORMAT_KEY = \DateTime::COOKIE },
     * )
     */
    public \DateTime $date;
}
```

As well as act differently depending on groups:

```php
use Symfony\Component\Serializer\Annotation as Serializer;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;

class Foo
{
    /**
     * @Serializer\Groups({ "extended" })
     * @Serializer\Context({ DateTimeNormalizer::FORMAT_KEY = \DateTime::RFC3339 })
     * @Serializer\Context(
     *   context = { DateTimeNormalizer::FORMAT_KEY = \DateTime::RFC3339_EXTENDED },
     *   groups = {"extended"},
     * )
     */
    public \DateTime $date;
}
```

The annotation can be repeated as much as you want to handle the different cases.
Context without groups is always applied first, then context for groups are merged in the provided order.
Context provided when calling `->serialize()` / `->normalize()` acts as the defaults for the properties without context provided in the metadata.

XML mapping (see tests) is a lot verbose due to the required structure to handle groups.

Such metadata contexts are also forwarded to name converters, max depth handlers, callbacks, ...

Of course, PHP 8 attributes are also supported:

```php
use Symfony\Component\Serializer\Annotation as Serializer;
use Symfony\Component\Serializer\Normalizer\DateTimeNormalizer;

class Foo
{
    #[Serializer\Groups(["extended"])]
    #[Serializer\Context([DateTimeNormalizer::FORMAT_KEY => \DateTime::RFC3339])]
    #[Serializer\Context(
      context: [DateTimeNormalizer::FORMAT_KEY => \DateTime::RFC3339_EXTENDED],
      groups: ["extended"],
    )]
    public \DateTime $date;
}
```

The PR should be ready for first batch of reviews / discussions.

- [x] Make Fabbot happy in 5.2
- [x] Missing `@Context` unit tests
- [x] rework xml & phpize values
- [x] Fix lowest build issue with annotations => bumped doctrine annotations to 1.7, as for other components

Commits
-------

7229fa1d8f [Serializer] Allow to provide (de)normalization context in mapping
2021-02-16 07:56:07 +01:00
Maxime Steinhausser
7229fa1d8f [Serializer] Allow to provide (de)normalization context in mapping 2021-02-16 07:56:01 +01:00
Robin Chalas
a4c5edc5ff Merge branch '5.2' into 5.x
* 5.2:
  [Workflow] Re-add InvalidTokenConfigurationException for BC
  Fix PHP 8.1 null values
  [Console] Fix PHP 8.1 null error for preg_match flag
  Fix: Article
  Definition::removeMethodCall should remove all matching calls
  [HttpFoundation] Fix typo in exception message
  mark the LazyIterator class as internal
  fix extracting mixed type-hinted property types
  [Worflow] Fixed GuardListener when using the new Security system
  keep valid submitted choices when additional choices are submitted
2021-02-15 19:57:44 +01:00
Robin Chalas
4365af6ce8 Merge branch '4.4' into 5.2
* 4.4:
  Fix PHP 8.1 null values
  [Console] Fix PHP 8.1 null error for preg_match flag
  Fix: Article
  Definition::removeMethodCall should remove all matching calls
  mark the LazyIterator class as internal
  fix extracting mixed type-hinted property types
  keep valid submitted choices when additional choices are submitted
2021-02-15 19:55:04 +01:00
Andreas Möller
34b320ba97
Fix: Article 2021-02-14 13:29:41 +01:00
Fabien Potencier
4a2e4e890c Merge branch '5.2' into 5.x
* 5.2:
  Streamline dataproviders
  fix validator when we have a false current element
  [Mailer][Mime] Fix case-sensitive handling of header names
  [Mime] Fix case-sensitive handling in Headers::isUniqueHeader()
  [Messenger] Fix Doctrine setup when using a migration
  [yaml] Delelte unused comparison operation
2021-02-03 05:42:38 +01:00
Fabien Potencier
dab16d041e Merge branch '4.4' into 5.2
* 4.4:
  Streamline dataproviders
  fix validator when we have a false current element
  [Mime] Fix case-sensitive handling in Headers::isUniqueHeader()
  [yaml] Delelte unused comparison operation
2021-02-03 05:42:09 +01:00
Oskar Stark
025079b051
Streamline dataproviders 2021-02-02 21:48:46 +01:00
Nicolas Grekas
e2e2640d5a Merge branch '5.2' into 5.x
* 5.2:
  [Uid] Fix time to float conversion
  [Serializer] Prevent access to private properties without getters
2021-01-27 19:13:13 +01:00
Nicolas Grekas
bdf3589918 Merge branch '4.4' into 5.2
* 4.4:
  [Serializer] Prevent access to private properties without getters
2021-01-27 19:13:05 +01:00
Julien Falque
f0409b403f
[Serializer] Prevent access to private properties without getters 2021-01-27 17:59:11 +01:00
Nicolas Grekas
4fdbbe21fb More cleanups and fixes 2021-01-27 12:34:01 +01:00
Nicolas Grekas
b9b9a993ba Merge branch '5.2' into 5.x
* 5.2:
  Fix merge
2021-01-27 12:32:16 +01:00
Nicolas Grekas
175b725dfe Fix merge 2021-01-27 12:32:03 +01:00
Nicolas Grekas
b9f7952a42 Merge branch '5.2' into 5.x
* 5.2:
  More cleanups and fixes
  More cleanups and fixes
  Fix merge
2021-01-27 12:30:19 +01:00
Nicolas Grekas
0045fc480d More cleanups and fixes 2021-01-27 12:24:50 +01:00
Nicolas Grekas
8a7bf238d6 Merge branch '5.1' into 5.2
* 5.1:
  More cleanups and fixes
2021-01-27 12:19:04 +01:00
Nicolas Grekas
75fd4ce584 More cleanups and fixes 2021-01-27 12:17:55 +01:00
Nicolas Grekas
e7966c099b Merge branch '5.2' into 5.x
* 5.2:
  Use createMock() and use import instead of FQCN
2021-01-27 11:19:48 +01:00
Nicolas Grekas
854de3cc2e Merge branch '5.1' into 5.2
* 5.1:
  Use createMock() and use import instead of FQCN
2021-01-27 11:15:41 +01:00
Nicolas Grekas
28f1ab67ca Merge branch '4.4' into 5.1
* 4.4:
  Use createMock() and use import instead of FQCN
2021-01-27 11:01:46 +01:00
Oskar Stark
e7e61ee551 Use createMock() and use import instead of FQCN 2021-01-27 10:09:26 +01:00
Nicolas Grekas
b8ab4ec721 Merge branch '5.2' into 5.x
* 5.2:
  Fix transient tests
  Fix class resolution in Doctrine EventListenerPass
  [SecurityBundle] Fix referencing aliases from RegisterEntryPointPass
  [Serializer] Fix tests  marked as incomplete
  propagate the object being validated to sub-constraints
  [Translator] fix handling plural for floating numbers
  fix redis messenger options with dsn
  Update ConsoleEvents.php
  allow Doctrine persistence 2 too
  [Messenger] Fix transporting non-UTF8 payloads by encoding them using base 64
  add doctrine/persistence as a dev requirement
  Exclude non-initialized properties accessed with getters
2021-01-27 10:05:46 +01:00
Nicolas Grekas
98b58b4c4c Merge branch '5.1' into 5.2
* 5.1:
  Fix transient tests
  Fix class resolution in Doctrine EventListenerPass
  [Serializer] Fix tests  marked as incomplete
  propagate the object being validated to sub-constraints
  [Translator] fix handling plural for floating numbers
  fix redis messenger options with dsn
  Update ConsoleEvents.php
  allow Doctrine persistence 2 too
  [Messenger] Fix transporting non-UTF8 payloads by encoding them using base 64
  add doctrine/persistence as a dev requirement
  Exclude non-initialized properties accessed with getters
2021-01-27 10:04:53 +01:00
Nicolas Grekas
abf8010eae Merge branch '4.4' into 5.1
* 4.4:
  Fix transient tests
  Fix class resolution in Doctrine EventListenerPass
  [Serializer] Fix tests  marked as incomplete
  [Translator] fix handling plural for floating numbers
  fix redis messenger options with dsn
  Update ConsoleEvents.php
  allow Doctrine persistence 2 too
  [Messenger] Fix transporting non-UTF8 payloads by encoding them using base 64
  add doctrine/persistence as a dev requirement
  Exclude non-initialized properties accessed with getters
2021-01-27 10:04:36 +01:00
Nicolas Grekas
484a95d8d1 bug #38900 [Serializer] Exclude non-initialized properties accessed with getters (BoShurik)
This PR was merged into the 4.4 branch.

Discussion
----------

[Serializer] Exclude non-initialized properties accessed with getters

| Q             | A
| ------------- | ---
| Branch?       | 4.4
| Bug fix?      | yes
| New feature?  | no <!-- please update src/**/CHANGELOG.md files -->
| Deprecations? | no <!-- please update UPGRADE-*.md and src/**/CHANGELOG.md files -->
| Tickets       | no <!-- prefix each issue number with "Fix #", no need to create an issue if none exist, explain below instead -->
| License       | MIT
| Doc PR        | symfony/symfony-docs#... <!-- required for new features -->

Allow to serialize
```php
final class Php74DummyPrivate
{
    private string $uninitializedProperty;

    private string $initializedProperty = 'defaultValue';

    public function getUninitializedProperty(): string
    {
        return $this->uninitializedProperty;
    }

    public function getInitializedProperty(): string
    {
        return $this->initializedProperty;
    }
}
```

Similar to #34791

Commits
-------

da9100320e Exclude non-initialized properties accessed with getters
2021-01-26 21:44:18 +01:00