TYPO3:如何从 PHP class 调用控制台命令?

TYPO3: How to call a console command from a PHP class?

我正在尝试 运行 DataHandler commands from multiple contexts (Frontend, Backend, etc.). From what I've read and tried, this has to be done within a Synfony command 让它正常工作。只有这样,在命令中,像这样的代码片段可以是 运行:

Bootstrap::initializeBackendAuthentication();
$data = [...]
$dataHandler = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\DataHandling\DataHandler::class);
$dataHandler->start($data, []);
$dataHandler->process_datamap();

_cli_ 后端用户 运行 执行这些 DataHandler 命令。

我已经根据文档创建了我的 Synfony 命令。它已注册,我可以这样调用它,它按预期工作:

$ vendor/bin/typo3 myext:rundatahandler

我的问题是:如何在 PHP class 中 运行 这个?我在文档或网上找不到它。我只为 Synfony Controller classes 找到它,它的行为与 TYPO3 不同,并且具有不同的输入和属性。

提前致谢!

您可以在 class 中使用 The Process Component 到 运行 命令。

安装

composer require symfony/process

在您的 PHP Class

中使用
use Symfony\Component\Process\Exception\ProcessFailedException;
use Symfony\Component\Process\Process;

class YouClass{

    public function someAction(){
        $process = new Process(['vendor/bin/typo3', 'myext:rundatahandler']);
        // set the working directory to the root of the project
        $process->setWorkingDirectory(getcwd() . "/../");
        $process->run();
    }
}

注意: 此外,如果您的 class 无法访问供应商文件夹,则您必须要求 vendor/autoload.php

require 'vendor/autoload.php';