Commit Graph

526 Commits

Author SHA1 Message Date
Alexander M. Turek
3d6c3ba836 Don't stop PSR-4 service discovery if a parent class is missing. 2018-01-26 21:15:55 +01:00
Nicolas Grekas
5e750ec4b5 [DI] Fix initialization of legacy containers by delaying include_once 2018-01-21 10:59:06 +01:00
Nicolas Grekas
dd28a3286f [DI] fix param name cast 2018-01-04 16:56:45 +01:00
Nicolas Grekas
14dd5d1dbd Remove randomness from dumped containers 2018-01-04 16:07:28 +01:00
Fabien Potencier
3a5c8a424e fixed some deprecation messages 2017-12-31 07:59:27 +01:00
Fabien Potencier
22c0e81d79 Merge branch '3.3' into 3.4
* 3.3:
  fixed some deprecation messages
  fixed some deprecation messages
  fixed some deprecation messages
  fixed some deprecation messages
  [2.7][DX] Use constant message contextualisation for deprecations
2017-12-31 07:07:31 +01:00
Fabien Potencier
74383b6e59 fixed some deprecation messages 2017-12-31 06:50:45 +01:00
Samuel ROZE
961e3e719c
Suggest to write an implementation if the interface cannot be autowired 2017-12-24 11:30:04 +01:00
Nicolas Grekas
4fe2551545 [DI] Optimize Container::get() for perf 2017-12-12 22:54:52 +01:00
Nicolas Grekas
9512f268f4 [DI] Add context to service-not-found exceptions thrown by service locators 2017-12-09 20:32:41 +01:00
Nicolas Grekas
f87380c22a [DI] Force root-namespace for function calls in the dumper container 2017-12-07 18:32:09 +01:00
Fabien Potencier
831bdc3201 bug #25282 [DI] Register singly-implemented interfaces when doing PSR-4 discovery (nicolas-grekas)
This PR was merged into the 3.4 branch.

Discussion
----------

[DI] Register singly-implemented interfaces when doing PSR-4 discovery

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

I'm feeling bad for not having this idea before 3.4.0 went out, therefore submitting on 3.4, despite this being a new feature, technically. On a DX pov still, this is a bugfix :) I'll let you accept the argument or not...

So, when doing PSR-4-based service registration, we keep only classes as services.
This systematically leads to the question: "But what about interfaces, shouldn't we type-hint against abstractions and not classes?!"
And the answer has invariably been: "Well, just create an alias!"
Which means doing configuration manually.

I fear that if we leave things as is, we're going to grow a "generation" of devs that will hijack autowiring and abuse hinting for classes instead of interfaces.

BUT, here is the idea implemented by this PR: let's create an alias for every singly-implemented interface we discover while looking for classes!
Plain local, simple, and obvious, isn't it?

Votes pending :)

Commits
-------

fcd4aa7807 [DI] Register singly-implemented interfaces when doing PSR-4 discovery
2017-12-04 11:20:32 -08:00
Nicolas Grekas
fcd4aa7807 [DI] Register singly-implemented interfaces when doing PSR-4 discovery 2017-12-04 19:49:26 +01:00
Fabien Potencier
c927c481aa bug #25255 [Console][DI] Fail gracefully (nicolas-grekas)
This PR was merged into the 3.4 branch.

Discussion
----------

[Console][DI] Fail gracefully

| Q             | A
| ------------- | ---
| Branch?       | 3.4
| Bug fix?      | yes
| New feature?  | no
| BC breaks?    | no
| Deprecations? | no
| Tests pass?   | yes
| Fixed tickets | https://github.com/symfony/flex/issues/212, #25280
| License       | MIT
| Doc PR        | -

I already experienced this issue a few times without spending time digging it:
sometimes, you call `cache:clear`, and the command quits without any output, and with 255 status code.

The reason is the `@include` in `Kernel`, which makes everything silent, especially fatal errors (thanks PHP...)
So if the to-be-removed container is broken for some fatal reason, the failure is really bad.

To fix that, here are two measures:
- use `include_once` instead of `require_once` in the dumped container: that's OK there to actually not immediately load the file, any hard failure will happen later anyway, and any soft failure will allow the `cache:clear` command to complete (like when you remove a package)
- register `Application::renderException()` as the main PHP exception handler, via `Debug::ErrorHandler` when it's available

End result when it fails:
![image](https://user-images.githubusercontent.com/243674/33494543-e1d07202-d6c3-11e7-9677-bc2ae72fbba9.png)

instead of a blank output.

Commits
-------

4a5a3f52ab [Console][DI] Fail gracefully
2017-12-02 15:04:03 -08:00
Nicolas Grekas
4a5a3f52ab [Console][DI] Fail gracefully 2017-12-02 19:20:11 +01:00
Fabien Potencier
9401afd031 bug #25244 [DI] Add missing deprecation when fetching private services from ContainerBuilder (nicolas-grekas)
This PR was merged into the 3.4 branch.

Discussion
----------

[DI] Add missing deprecation when fetching private services from ContainerBuilder

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

Commits
-------

93c0b3801c [DI] Add missing deprecation when fetching private services from ContainerBuilder
2017-12-01 09:40:17 -08:00
Nicolas Grekas
93c0b3801c [DI] Add missing deprecation when fetching private services from ContainerBuilder 2017-12-01 16:10:27 +01:00
Nicolas Grekas
adf18198f6 [DI] Fix false-positive circular exception 2017-12-01 14:16:38 +01:00
Nicolas Grekas
de5eecc5fa [DI] Fix circular reference when using setters 2017-11-29 15:34:00 +01:00
Kévin Dunglas
6e622c668b [DI] Prevent a ReflectionException during cache:clear when the parent class doesn't exist 2017-11-27 10:49:34 +01:00
Nicolas Grekas
f897542cb2 Merge branch '3.3' into 3.4
* 3.3:
  [DI] Dont resolve envs in service ids
  Add tests proving it can load annotated files
  [WebProfilerBundle] Reset letter-spacing in toolbar
  Prefer overflow-wrap to word-break
  [Routing] Fix "config-file-relative" annotation loader resources
  Make search in debug:container command case-insensitive
  `resolveEnvPlaceholders` will return a mixed value
2017-11-24 15:13:49 +01:00
Nicolas Grekas
7921255faf [DI] Dont resolve envs in service ids 2017-11-24 13:44:22 +01:00
Nicolas Grekas
6fc596754c Merge branch '3.3' into 3.4
* 3.3:
  [Form] Fixed ContextErrorException in FileType
  [DI] Fix handling of inlined definitions by ContainerBuilder
2017-11-23 12:03:08 +01:00
Nicolas Grekas
ae62e56d8a Merge branch '2.8' into 3.3
* 2.8:
  [Form] Fixed ContextErrorException in FileType
  [DI] Fix handling of inlined definitions by ContainerBuilder
2017-11-23 12:01:29 +01:00
Nicolas Grekas
10ec39e850 Merge branch '2.7' into 2.8
* 2.7:
  [Form] Fixed ContextErrorException in FileType
  [DI] Fix handling of inlined definitions by ContainerBuilder
2017-11-23 11:48:23 +01:00
Nicolas Grekas
c9c18ac7f3 [DI] Fix handling of inlined definitions by ContainerBuilder 2017-11-23 11:22:49 +01:00
Nicolas Grekas
9cc4a213c9 [DI] Analyze setter-circular deps more precisely 2017-11-20 18:46:17 +01:00
Maxime Steinhausser
5be25d55fd [DI] Remove scalar typehint in class used in test case 2017-11-19 14:43:05 +01:00
Christophe Coevoet
8d7f6ede84 bug #24991 [DependencyInjection] Single typed argument can be applied on multiple parameters (nicolas-grekas, sroze)
This PR was merged into the 3.4 branch.

Discussion
----------

[DependencyInjection] Single typed argument can be applied on multiple parameters

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

I'm @nicolas-grekas' test writer today. This makes the argument resolution working when injecting the same type multiple times (sub-set of PR #24978)

Commits
-------

d51265447d Test that named arguments are prioritized over typehinted
bf7eeef3fb Prove that change is working with tests
2176be74d8 [DI] Fix by-type args injection
2017-11-17 15:27:47 +01:00
Valentin
49fc6778ee Throw on service:method factory notation in PHP-based DI configuration 2017-11-17 12:52:23 +03:00
Samuel ROZE
d51265447d
Test that named arguments are prioritized over typehinted 2017-11-17 10:42:21 +02:00
Samuel ROZE
bf7eeef3fb
Prove that change is working with tests 2017-11-17 01:07:36 +02:00
Nicolas Grekas
ecad1c4b3b Merge branch '3.3' into 3.4
* 3.3:
  [DI] Fix dumping with custom base class
  [HttpFoundation] Add test
  [HttpFoundation] Fix session-related BC break
  [Process] Workaround PHP bug #75515 in ProcessTest::testSimpleInputStream()
  fix method name
2017-11-13 19:20:08 +01:00
Nicolas Grekas
2dd74ab89e [DI] Fix dumping with custom base class 2017-11-13 19:10:32 +01:00
Nicolas Grekas
7db5d40a26 [DI] Friendlier name for generated container in "as_files" mode 2017-11-11 17:18:07 +01:00
Nicolas Grekas
f7cb559a06 [DI] Add "container.hot_path" tag to flag the hot path and inline related services 2017-11-09 15:14:31 +01:00
Nicolas Grekas
b2edd51177 bug #24850 [DI] Fix cannot bind env var (ogizanagi)
This PR was merged into the 3.4 branch.

Discussion
----------

[DI] Fix cannot bind env var

| Q             | A
| ------------- | ---
| Branch?       | 3.4 <!-- see comment below -->
| Bug fix?      | yes
| New feature?  | no <!-- don't forget to update src/**/CHANGELOG.md files -->
| BC breaks?    | no
| Deprecations? | no <!-- don't forget to update UPGRADE-*.md files -->
| Tests pass?   | yes
| Fixed tickets | #24845 <!-- #-prefixed issue number(s), if any -->
| License       | MIT
| Doc PR        | N/A

In #24602 we removed the processing of bindings from the `AbstractRecursivePass`. But there is actually one case where we want a recursive pass to process them: to resolve env param placeholders.

Commits
-------

f8f3a15 [DI] Fix cannot bind env var
2017-11-07 14:40:01 +01:00
Maxime Steinhausser
f8f3a15b7a [DI] Fix cannot bind env var 2017-11-07 09:01:11 +01:00
Nicolas Grekas
db12a9872d [DI] Fix the "almost-circular refs" fix 2017-11-05 19:01:07 +01:00
Nicolas Grekas
beb4df712c [DI] Fix "almost-circular" dependencies handling 2017-11-05 13:06:25 +01:00
Nicolas Grekas
2c18da709f Merge branch '3.3' into 3.4
* 3.3:
  [BrowserKit] Handle deprecations triggered in insulated requests
  [Bridge\PhpUnit] Handle deprecations triggered in separate processes
  [Validator] added magic method __isset()  to File Constraint class
  [DI] Fix possible incorrect php-code when dumped strings contains newlines
  [Translation] minor: remove unused variable in test
  never match invalid IP addresses
2017-10-13 15:33:47 +02:00
Nicolas Grekas
17b48edebc Merge branch '2.8' into 3.3
* 2.8:
  [Validator] added magic method __isset()  to File Constraint class
  [DI] Fix possible incorrect php-code when dumped strings contains newlines
  [Translation] minor: remove unused variable in test
  never match invalid IP addresses
2017-10-13 15:32:37 +02:00
Nicolas Grekas
d04c0ea45b Merge branch '2.7' into 2.8
* 2.7:
  [Validator] added magic method __isset()  to File Constraint class
  [DI] Fix possible incorrect php-code when dumped strings contains newlines
  [Translation] minor: remove unused variable in test
  never match invalid IP addresses
2017-10-13 15:30:20 +02:00
Artur Eshenbrener
345f2fc60e [DI] Fix possible incorrect php-code when dumped strings contains newlines 2017-10-12 17:34:26 +02:00
Fabien Potencier
d48bcbfcf6 feature #24484 [DI] Throw accurate failures when accessing removed services (nicolas-grekas)
This PR was merged into the 3.4 branch.

Discussion
----------

[DI] Throw accurate failures when accessing removed services

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

See linked issue.
This will throw a useful message when accessing a removed service.
When setting a removed service, a deprecation notice will be thrown also so that in master we can throw an exception then.

Commits
-------

fe7f26d4f3 [DI] Throw accurate failures when accessing removed services
2017-10-09 21:07:35 -07:00
Fabien Potencier
f756fb8b5b bug #24491 [DI] Exclude inline services declared in XML from autowiring candidates (nicolas-grekas)
This PR was merged into the 3.4 branch.

Discussion
----------

[DI] Exclude inline services declared in XML from autowiring candidates

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

As reported in #24311, inline services should not be candidates for autowiring.
This PR fixes the issue, but is submitted against 3.4 because there is a potential BC break here, for ppl that didn't realize they relied on this (already deprecated) behavior.
We *could* not merge this PR and consider the deprecation is fine - but in practice, the WTF is hitting several ppl already AFAIK, so we should close that door IMHO.

Commits
-------

d90e7212ea [DI] Exclude inline services declared in XML from autowiring candidates
2017-10-09 10:13:32 -07:00
Nicolas Grekas
92f621fcf7 Merge branch '3.3' into 3.4
* 3.3:
  [Bridge\PhpUnit] Fix infinite loop when running isolated method
  remove unused fixtures file
  parse references on merge keys with objects
2017-10-09 16:52:13 +02:00
Nicolas Grekas
d90e7212ea [DI] Exclude inline services declared in XML from autowiring candidates 2017-10-08 16:39:03 +02:00
Nicolas Grekas
fe7f26d4f3 [DI] Throw accurate failures when accessing removed services 2017-10-07 23:38:34 +02:00
Christian Flothmann
3702e5ff37 remove unused fixtures file 2017-10-06 17:17:51 +02:00