handle array root element

An array to string conversion notice was thrown when the root element of
the thing being validated is an array.
bug #10123 handle array root element (greg0ire)

This PR was submitted for the 2.4 branch but it was merged into the 2.3 branch instead (closes #10123).

Discussion
----------

handle array root element

An array to string conversion notice was thrown when the root element of the thing being validated is an array.

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets |
| License       | MIT

Commits
-------

17ed8bf handle array root element
Fixed ACE domain checks on UrlValidator (#10031)
bug #10275 [Validator] Fixed ACE domain checks on UrlValidator (#10031) (aeoris)

This PR was merged into the 2.3 branch.

Discussion
----------

[Validator] Fixed ACE domain checks on UrlValidator (#10031)

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #10031
| License       | MIT
| Doc PR        |

I added some checks to allow internationalised domain names as per reported on #10031 and some extra testcases to cover ACE domain names.

Commits
-------

7a2f154 Fixed ACE domain checks on UrlValidator (#10031)
Added new validator for UUIDs
feature #10291 [Validator] New validator for UUIDs (colinodell)

This PR was submitted for the 2.3 branch but it was merged into the 2.5-dev branch instead (closes #10291).

Discussion
----------

[Validator] New validator for UUIDs

This PR adds a new validator for [RFC 4122](http://tools.ietf.org/html/rfc4122)-compliant [universally unique identifiers (UUIDs)](https://en.wikipedia.org/wiki/Universally_unique_identifier).  This implementation validates both the format and (optionally) the UUID version.

The RFC is very specific on how UUIDs should be formatted.  However, some systems/platforms like PostgreSQL produce or allow similar but non-compliant UUIDs which some developers may need to allow.  (Their dashes are in different spots, or they might be wrapped in curly braces, but still contain the same number of hexadecimal characters). To accommodate both parties, I've added a `strict` option to the constraint.  When enabled (default), the validator only allows UUIDs conforming to the exact RFC specs.

Comments and feedback would be greatly appreciated :)

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | n/a
| License       | MIT
| Doc PR        | symfony/symfony-docs#3619

**TODOs:**

 - [x] Gather feedback; make changes
 - [x] Ensure all tests pass
 - [ ] Get approval; have this added to the 2.5 milestone
 - [x] Submit PR for the documentation

Commits
-------

19931c9 Added new validator for UUIDs
Fix issue symfony/symfony#10345 '[FrameworkBundle][Console] container:debug --parameter="" not working anymore'
bug #10363 [FrameworkBundle][Console] Fix issue #10345 container:debug --parameter="" not working anymore (FineWolf)

This PR was merged into the 2.4 branch.

Discussion
----------

[FrameworkBundle][Console] Fix issue #10345 container:debug --parameter="" not working anymore

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes*
| Fixed tickets | #10345
| License       | MIT
| Doc PR        | N/A

## TODO
- [x] Fix issue #10345
- [ ] Create unit test for `describeContainerParameter`

Commits
-------

b278aa4 Fix issue symfony/symfony#10345 '[FrameworkBundle][Console] container:debug --parameter="" not working anymore'
Add UnprocessableEntityHttpException to HttpKernel Exceptions
minor #10527 [HttpKernel] [Exception] Add UnprocessableEntityHttpException to HttpKernel Exceptions (steveYeah)

This PR was merged into the 2.5-dev branch.

Discussion
----------

[HttpKernel] [Exception] Add UnprocessableEntityHttpException to HttpKernel Exceptions

Add UnprocessableEntityHttpException, as this would have been useful as few times now.

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | -
| License       | MIT
| Doc PR        | -

Commits
-------

304cbe9 Add UnprocessableEntityHttpException to HttpKernel Exceptions
Check headers sent before sending PHP response

If the response contents has been sent before an error occurs, PHP
triggers the warning "Cannot modify header information - headers already sent"

This change ensure that the error message is echoed, while it's impossible
to change the HTTP status code and headers.
bug #10523 [Debug] Check headers sent before sending PHP response (GromNaN)

This PR was merged into the 2.3 branch.

Discussion
----------

[Debug] Check headers sent before sending PHP response

If the response contents has been sent before an error occurs, PHP triggers the warning "Cannot modify header information - headers already sent".

This change ensure that the useful error message is echoed, while it's impossible to change the HTTP status code and headers.

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | n/a
| License       | MIT
| Doc PR        | n/a

Commits
-------

97591c1 Check headers sent before sending PHP response
Merge branch '2.3' into 2.4

* 2.3:
  Check headers sent before sending PHP response
  Fixed ACE domain checks on UrlValidator (#10031)
  handle array root element
Merge branch '2.4'

* 2.4:
  Check headers sent before sending PHP response
  Fix issue symfony/symfony#10345 '[FrameworkBundle][Console] container:debug --parameter="" not working anymore'
  Fixed ACE domain checks on UrlValidator (#10031)
  handle array root element
#1581 - Strict in Email constraint and use of Egulias\EmailValidator
feature #9140 [Validator][Email] - Strict validation and soft dependency (egulias)

This PR was squashed before being merged into the 2.5-dev branch (closes #9140).

Discussion
----------

[Validator][Email] - Strict validation and soft dependency

| Q             | A
| ------------- | ---
| Bug fix?      | no
| New feature?  | yes
| BC breaks?    | yes
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #1581, #4930
| License       | MIT
| Doc PR        | https://github.com/symfony/symfony-docs/pull/3469

TODO
---------
- [x] submit changes to the documentation
- [x] document the BC breaks
- [x] finish the code
- [x] gather feedback for my changes

In #1581 @bschussek suggested to pass the strict_email config to  `Validator\EmailValidator::__construct($strict)`, I did not put it there yet since the constraint can receive that configuration each time the constraint is used despite the fact of the global configuration. This could lead to some logic in the constructor and I wanted first to integrate the strict validator.

BC Break
--------------
I'm not sure of this, but as a soft dependency is added and now some emails that where valid before no longer are I thought it is.

Commits
-------

3368630 #1581 - Strict in Email constraint and use of Egulias\EmailValidator
Fixed YamlFileLoader imports path

YamlFileLoader used the resource name as the current directory during import, which can cause a failed import when using a relative path. Using the $path variable output from the locator is consistent with other loaders and fixes the bug.
bug #10545 [DependencyInjection] Fixed YamlFileLoader imports path (jrnickell)

This PR was merged into the 2.3 branch.

Discussion
----------

[DependencyInjection] Fixed YamlFileLoader imports path

| Q             | A
| ------------- | ---
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | #10516
| License       | MIT
| Doc PR        | http://symfony.com/doc/current/book/service_container.html#importing-configuration-with-imports

YamlFileLoader used the resource name as the current directory during import, which can cause a failed import when using a relative path. Using the $path variable output from the locator is consistent with other loaders and fixes the bug.

Commits
-------

fd1d48b Fixed YamlFileLoader imports path
Move normalizer cache to getNormalier()/getDenormalizer(), use those in normalizeObject()/denormalizeObject()
feature #10457 [Serializer] Unify usage of normalizer cache (Berdir)

This PR was squashed before being merged into the 2.5-dev branch (closes #10457).

Discussion
----------

[Serializer] Unify usage of normalizer cache

| Q             | A
| ------------- | ---
| Bug fix?      | no (unless performance problems are considered bugs)
| New feature?  | no
| BC breaks?    | no (unless the exception structure should be simplified)
| Deprecations? | no
| Tests pass?   | yes ( I had some test fails locally when running the whole suite, but not related to Serializer)
| Fixed tickets |
| License       | MIT
| Doc PR        |

Some clean-up of the Serialization class, which has methods to get the Normalizer/Denormalizer but then repeats that logic in normalizeObject()/denormalizeObject().

Took great care to keep the exception behavior exactly like it is now as the tests depend on it, but it's strange (the methods use different exception classes if no normalizer is found and the "no normalizer" LogicException only exists in normalizeObject/denomalizeObject. That could easily be simplified further, to the point where those functions could easily be merged into the calling methods, as it would just be a single line of code. There is also a duplicate call to $this->normalizeObject() in normalize() that just exists to throw the LogicException for Symfony\Component\Serializer\Tests\SerializerTest::testSerializeNoNormalizer. Other tests do not except that to be thrown there, though.

Also noticed that getNormalizer()/getDenormalizer() are documented as @inheritdocs, which is a lie as they are private. Added some basic docs there.

This is performance relevant, as not having the cache in the getter methods means all normalizers are checked again to verify if a normalizer supports the data.

Commits
-------

e7389aa Move normalizer cache to getNormalier()/getDenormalizer(), use those in normalizeObject()/denormalizeObject()