如何调试我的命令控制器?

How can I debug my command controller?

我已经创建了一个命令控制器并将其注册到我的调度程序中,例如:

$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers'][] =
        'Blog\Events\Command\UpdateCommandController';

我可以用调度程序执行我的命令;但是,如果我在 UpdateCommandController 中输入 var_dumpdie,我将不会在 TYPO3 后端看到任何变化。

如何调试我的命令控制器。而且,正确的方法是什么?

有人可以给我提示吗?

这是我要调试的命令控制器:

namespace Blog\Events\Command;
use TYPO3\CMS\Extbase\Mvc\Controller\CommandController;

class UpdateCommandController extends CommandController
{
    /**
     * Eventsrepository
     *
     * @var \Blog\Events\Domain\Repository\EventsRepository
     * @inject
     */
    protected $eventsRepository;

    public function updateCommand()
    {
        echo "hello world";
    }
}

您可以通过从命令行调用它来调试控制器。为此,您需要一个后端用户 _cli_lowlevel(没有权限)。

然后您可以使用 php 执行脚本 typo3/cli_dispatch.phpsh。要执行你的命令控制器,你需要执行类似这样的命令:

php typo3/cli_dispatch.phpsh extbase <controller-name>:<action-name>

<controller-name><action-name> 在您的情况下都是 update。要查看 CommandControllers 的所有可用操作,请执行此命令:

php typo3/cli_dispatch.phpsh extbase help

您可以使用 Typo3 扩展 Developer Log 进行调试。 扩展在数据库中创建日志记录并在后端模块中显示它们。

Extbase中的使用示例PHP代码:

$arguments = 'any-data-for-log';

\TYPO3\CMS\Core\Utility\GeneralUtility::devlog(
    '[ClassName::functionName]',
    'extension_name',
    1, // severity
    array('arguments' => $arguments) // log data
);

这是更好的方法(对我来说)。

在 TYPO3 9 及更高版本中,您可以这样登录:

 $this->logger = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance(\TYPO3\CMS\Core\Log\LogManager::class)->getLogger(__CLASS__);
        $logWriter = \TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Core\Log\Writer\FileWriter', ['logFile' => 'typo3temp/logs/my_import.log']);
        $this->logger->addWriter(\TYPO3\CMS\Core\Log\LogLevel::INFO, $logWriter);

然后

$this->logger->error($e->getMessage());