Files
cms-core/Documentation/Changelog/11.0/Breaking-90799-DependencyInjectionWithNonPublicPropertiesHasBeenRemoved.rst

66 lines
1.7 KiB
ReStructuredText

.. include:: /Includes.rst.txt
.. _breaking-90799:
===================================================================================
Breaking: #90799 - Dependency injection with non-public properties has been removed
===================================================================================
See :issue:`90799`
Description
===========
In TYPO3 v9, the (dependency) injection via :php:`@Inject` has been marked as deprecated for
non-public properties. The reason was to avoid having the core use the PHP reflection
api to make non-public properties writable from outside the class scope. Since there
are other methods for dependency injection (constructor/setter injection), injection
into non-public properties has now been removed.
Impact
======
Non-public properties with :php:`@Inject` annotations will no longer trigger extbase
dependency injection. Those properties will have their default state after object
instantiation.
Affected Installations
======================
All installations that use non-public properties for extbase dependency injection
as seen in this example:
.. code-block:: php
class Foo
{
/**
* @var Service
* @TYPO3\CMS\Extbase\Annotation\Inject
*/
private $service;
}
Migration
=========
When not using constructor/setter injection instead, switch to inject methods
(recommended for compatibility with symfony dependency injection) or mark the
property public (works with extbase dependency injection only):
.. code-block:: php
class Foo
{
/**
* @var Service
* @TYPO3\CMS\Extbase\Annotation\Inject
*/
public $service;
}
.. index:: PHP-API, NotScanned, ext:extbase