TYPO3 v15 dev-main snapshot ()
This commit is contained in:
@@ -0,0 +1,74 @@
|
||||
.. include:: /Includes.rst.txt
|
||||
|
||||
.. _feature-107151-1763044849:
|
||||
|
||||
=========================================================================
|
||||
Feature: #107151 - Add AsNonSchedulableCommand attribute for CLI commands
|
||||
=========================================================================
|
||||
|
||||
See :issue:`107151`
|
||||
|
||||
Description
|
||||
===========
|
||||
|
||||
With :issue:`101567` the usage of Symfony's `#[AsCommand]` attribute
|
||||
has been introduced, which allows configuring a Symfony CLI command
|
||||
with a corresponding name, description and further options.
|
||||
|
||||
It however lacked TYPO3's custom implementation of the `schedulable`
|
||||
option, which allows flagging a CLI command to be not allowed to be
|
||||
scheduled via the :guilabel:`Administration > Scheduler` backend module.
|
||||
|
||||
.. note::
|
||||
The top-level backend modules were renamed in TYPO3 v14.
|
||||
The module now called :guilabel:`Administration` was formerly named
|
||||
:guilabel:`System`, and the module now called :guilabel:`System` was formerly
|
||||
named :guilabel:`Admin Tools`.
|
||||
|
||||
For details, see:
|
||||
`Feature: #107628 – Improved backend module naming and structure
|
||||
<https://docs.typo3.org/permalink/changelog:feature-107628-1729026000>`_.
|
||||
|
||||
This previously required tagging such a command with the
|
||||
:yaml:`schedulable: false` tag attribute in the :file:`Services.yaml` or
|
||||
:file:`Services.php` definition.
|
||||
|
||||
For this, the PHP attribute
|
||||
:php-short:`\TYPO3\CMS\Core\Attribute\AsNonSchedulableCommand` has been
|
||||
introduced. Any Symfony Command can use this empty attribute. The automatic
|
||||
Scheduler registry will ignore any command with this tag.
|
||||
|
||||
By default, a Symfony Command remains schedulable using the regular Symfony
|
||||
attribute. To prevent redundancy, the new attribute
|
||||
:php:`#[AsNonSchedulableCommand]` should be used only on top of that.
|
||||
|
||||
Another advantage is that an IDE like PhpStorm is capable of showing all
|
||||
usages of that attribute inside a project.
|
||||
|
||||
Impact
|
||||
======
|
||||
|
||||
Developers can now fully embrace using the Symfony :php:`#[AsCommand]`
|
||||
attribute and still be able to declare a non-schedulable execution within
|
||||
the scope of the same class, without any service registration.
|
||||
|
||||
This is achieved by using the :php:`#[AsNonSchedulableCommand]` in addition
|
||||
to the :php:`#[AsCommand]` attribute.
|
||||
|
||||
Example
|
||||
=======
|
||||
|
||||
.. code-block:: php
|
||||
|
||||
use Symfony\Component\Console\Attribute\AsCommand;
|
||||
use Symfony\Component\Console\Command\Command;
|
||||
use TYPO3\CMS\Core\Attribute\AsNonSchedulableCommand;
|
||||
|
||||
#[AsCommand('myextension:import', 'Import data from external source')]
|
||||
#[AsNonSchedulableCommand]
|
||||
final class ImportCommand extends Command
|
||||
{
|
||||
// ...
|
||||
}
|
||||
|
||||
.. index:: Backend, PHP-API, ext:core
|
||||
Reference in New Issue
Block a user