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';
我正在尝试 运行 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';