TYPO3 v15 dev-main snapshot ()

This commit is contained in:
2026-08-10 22:31:09 +02:00
commit af8cc155b5
6818 changed files with 642608 additions and 0 deletions
@@ -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