Breaking: #98281 - Make AbstractPlugin @internal¶
See forge#98281
Description¶
Extending the class \TYPO3\CMS\Frontend\Plugin\AbstractPlugin
is not a
recommended way of developing Frontend plugins anymore. This class is not
maintained anymore and may be removed in future versions without further notice.
The TypoScript property plugin.tx_myextension_pi1._DEFAULT_PI_VARS
has only been used in the class AbstractPlugin
. It is therefore not public
API anymore.
Impact¶
Plugins based on \TYPO3\CMS\Frontend\Plugin\AbstractPlugin
will
continue to function. However, there will be warnings about using internal
code displayed in most IDEs.
_DEFAULT_PI_VARS
has been removed from syntax highlighting as it is
not public API anymore.
Affected installations¶
All extensions having classes that extend
\TYPO3\CMS\Frontend\Plugin\AbstractPlugin
are affected.
Migration¶
Remove the dependency of \TYPO3\CMS\Frontend\Plugin\AbstractPlugin
. If
functionality of this class is still used, copy it into your plugin.
Example¶
Class before migration:
class RandomContent extends AbstractPlugin
{
public function main(string $content, array $conf): string
{
$this->conf = $conf;
// Init FlexForm configuration for plugin
$this->pi_initPIflexForm();
if ($this->pi_getFFvalue(
$this->cObj->data['pi_flexform'],
'which_pages', 'sDEF')
) {
$this->conf['pages'] = $this->pi_getFFvalue(
$this->cObj->data['pi_flexform'],
'which_pages', 'sDEF'
);
}
// ...
}
}
Class after migration:
class RandomContent
{
/**
* The back-reference to the mother cObj object set at call time
*/
public $cObj;
/**
* This setter is called when the plugin is called from UserContentObject (USER)
* via ContentObjectRenderer->callUserFunction().
*
* @param ContentObjectRenderer $cObj
*/
public function setContentObjectRenderer(ContentObjectRenderer $cObj): void
{
$this->cObj = $cObj;
}
public function main(string $content, array $conf): string
{
$this->conf = $conf;
$this->pi_initPIflexForm(); // Init FlexForm configuration for plugin
if ($this->pi_getFFvalue($this->cObj->data['pi_flexform'],
'which_pages', 'sDEF')) {
$this->conf['pages'] = $this->pi_getFFvalue(
$this->cObj->data['pi_flexform'],
'which_pages',
'sDEF'
);
}
// ...
}
/**
* Converts $this->cObj->data['pi_flexform'] from XML string to FlexForm array.
*
* @param string $field Field name to convert
*/
public function pi_initPIflexForm($field = 'pi_flexform')
{
// ...
}
public function pi_getFFvalue(
$T3FlexForm_array,
$fieldName,
$sheet = 'sDEF',
$lang = 'lDEF',
$value = 'vDEF'
) {
// ...
}
}
It is also possible to migrate to an Extbase plugin using a controller. See the Extbase documentation, chapter "Frontend Plugins".