如何调试我的命令控制器?
How can I debug my command controller?
我已经创建了一个命令控制器并将其注册到我的调度程序中,例如:
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers'][] =
'Blog\Events\Command\UpdateCommandController';
我可以用调度程序执行我的命令;但是,如果我在 UpdateCommandController
中输入 var_dump
或 die
,我将不会在 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());
我已经创建了一个命令控制器并将其注册到我的调度程序中,例如:
$GLOBALS['TYPO3_CONF_VARS']['SC_OPTIONS']['extbase']['commandControllers'][] =
'Blog\Events\Command\UpdateCommandController';
我可以用调度程序执行我的命令;但是,如果我在 UpdateCommandController
中输入 var_dump
或 die
,我将不会在 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());