【问题标题】:Symfony Command tapped in monologSymfony 命令在独白中被窃听
【发布时间】:2016-12-22 18:59:16
【问题描述】:

我创建了一个自定义命令。我想用独白记录用户使用参数和选项点击的命令

例如:php bin/console app:my_command argument1 --option=1234

现在我有了:

        $this->log->error('error on command', array(
            'command_tapped_by_user' => '????',
            'command' => $this->getName(),
            'arguments' => $input->getArguments(),
            'options' => $input->getOptions(),
            'exception' => $e->getMessage()
        ));

谢谢

【问题讨论】:

    标签: symfony monolog


    【解决方案1】:

    传递给 PHP 脚本的所有参数都在 $argv 数组中可用,其中第一个元素是脚本名称。它不是一个“超全局”数组,在 Symfony 命令(或任何其他函数或方法)中,它可以作为$GLOBALS 的元素或通过global 关键字使用。原始命令由空格字符分隔。要恢复它,您应该加入他们:

    echo join(' ', $GLOBALS['argv']);
    

    此外,如果您不担心操作系统的依赖关系(并且如果您是一个不循规蹈矩的人),您可以使用系统工具。比如在Linux环境下当前命令行存储在/proc/$PID/cmdline:

    $pid = getmypid();
    $cmd = file_get_contents("/proc/$pid/cmdline");
    // Arguments are splitted by NULL bytes that we replace by space character:
    echo str_replace("\0", " ", $cmd);
    

    【讨论】:

    • 使用Symfony/Console的实际目的是隐藏这些技术细节。在使用 Symfony 时,我建议您使用它们的实用程序,例如 ArgvInput
    • 你说得对,我忘记了那节课。方法__toString() 似乎适合这项任务。
    猜你喜欢
    • 2019-02-02
    • 1970-01-01
    • 2015-01-13
    • 2019-04-20
    • 1970-01-01
    • 2019-04-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多