You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
…ss for factory declarations (ogizanagi)
This PR was merged into the 3.3-dev branch.
Discussion
----------
[DependencyInjection] Use current class as default class for factory declarations
| Q | A
| ------------- | ---
| Branch? | master
| Bug fix? | no
| New feature? | yes
| BC breaks? | no
| Deprecations? | no
| Tests pass? | yes
| Fixed tickets | #20888
| License | MIT
| Doc PR | Should update the notice about the "class" attribute on http://symfony.com/doc/current/service_container/factories.html#20888 makes sense to me, considering the following sample extracted from the documentation:
```xml
<service id="app.newsletter_manager" class="AppBundle\Email\NewsletterManager">
<factory class="AppBundle\Email\NewsletterManager" method="create" />
</service>
```
The class is used as a factory to create itself, thus it can be simplified to:
```xml
<service id="app.newsletter_manager" class="AppBundle\Email\NewsletterManager">
<factory method="create" />
</service>
```
However, it's not possible to provide the same feature for the YAML format, because it doesn't allow to distinct a function from a method call if the class is not provided explicitly under the `factory` key, whereas the xml format use a dedicated `function` attribute.
Would this inconsistency between those two formats be a no-go for this feature?
The doc notices:
> When using a factory to create services, the value chosen for the class option has no effect on the resulting service. The actual class name only depends on the object that is returned by the factory. However, the configured class name may be used by compiler passes and therefore should be set to a sensible value.
If this is merged, it should be updated wisely in order to not confuse everyone with this feature when using the xml format.
UPDATE: The yaml format is now supported when the class is not provided in the factory array:
```yml
services:
my_factory:
class: Bar\Baz
factory: [~, 'create']
```
Commits
-------
e6d8570 [DependencyInjection] Use current class as default class for factory declarations
Assume this config:
I would expect this to call
SomeClass::create()
. Instead it dies with this error:Any reason to not use the current class as the default class for a factory declaration.
The text was updated successfully, but these errors were encountered: