【问题标题】:How can I debug my command controller?如何调试我的命令控制器?
【发布时间】:2015-07-19 12:50:35
【问题描述】:

我已经创建了一个命令控制器并在我的调度器上注册了它,比如:

$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";
    }
}

【问题讨论】:

    标签: typo3 extbase


    【解决方案1】:

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

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

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

    &lt;controller-name&gt;&lt;action-name&gt; 在您的情况下都是 update。要查看 CommandControllers 中的所有可用操作,请执行以下命令:

    php typo3/cli_dispatch.phpsh extbase help
    

    【讨论】:

    • 我创建了“cli_lower”用户并尝试像这样调用我的命令:php typo3/cli_dispatch.phpsh extbase update:update,但没有任何反应,我没有得到“hello world”的输出.
    • php typo3/cli_dispatch.phpsh extbase help 打印什么?您是否将用户命名为 _cli_lowlevel 或“cli_lower”?
    • 对不起,我的错误,我的用户名有拼写错误。现在好了。在我为诸如“30 2 * * *”之类的调度命令定义间隔后,我是否应该为调用“php typo3/cli_dispatch.phpsh update:update”创建一个 cron 作业?
    • 不,要定期执行任务,您应该使用 TYPO3s 调度程序。要运行它,您需要创建一个执行 php typo3/cli_dispatch.phpsh scheduler 的 cron 作业。此外,您需要添加另一个无权限用户_cli_scheduler。调度程序的设置检查还告诉您要执行的确切命令,以及绝对路径。
    【解决方案2】:

    您可以使用 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
    );
    

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

    【讨论】:

      【解决方案3】:

      在 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());
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-11-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多