【问题标题】:How can I get CakePHP to use shell output level when loading Task on the fly动态加载任务时如何让CakePHP使用shell输出级别
【发布时间】:2013-08-11 02:08:40
【问题描述】:

CakePHP 2.3.8 版

如果我使用public $tasks = array('Email');$this->Email->execute(); 输出级别,即Console/cake Test --verbose 将在电子邮件任务中使用详细输出。但是,如果我使用 TaskCollection 对象动态加载任务,则不会。它只使用默认的 NORMAL 输出电平。

class TestShell extends AppShell {
    public function main() {
        $Email = $this->Tasks->load('Email');
        $Email->execute();
    }
}

class EmailTask extends Shell {
    public function execute() {
        $this->out('Some debugging output', 1, Shell::VERBOSE);
    }
}

如何设置 TestShell 以在动态加载时将输出级别传递给 EmailTask​​?


更新:我尝试将 getOptionParser() 添加到 Shell 和 Task,以便可以按照 Cookbook 使用 $this->params['verbose'],但我收到错误:未定义索引:详细。

public function getOptionParser() {
    $parser = parent::getOptionParser();
    $parser->addOption('verbose', array(
        'help' => 'Enable verbose output.',
        'boolean' => true
    ));
    return $parser;
}

用某种解决方案更新

我可以像这样手动将参数传递给任务:

public function main() {
    $Email = $this->Tasks->load('Email');
    $Email->params =& $this->params;
    $Email->execute();
}

但TaskCollection 不应该为我做那件事吗?

【问题讨论】:

  • 您应该始终提及您正在使用的确切 cakephp 版本。

标签: cakephp cake-console


【解决方案1】:

您是否在 Shell 和您的任务中都注册了详细参数?使用控制台选项解析器? 然后它应该被传递给它。

https://github.com/cakephp/cakephp/blob/master/lib/Cake/Console/Command/Task/TestTask.php#L547

另外:你的 EmailTask​​ 不应该扩展 AppShell 吗?

【讨论】:

  • 我没有使用 consoleOptionParser。你能举个例子吗?我从 Cookbook 中实现了addOption,但这没有用。此外,Cookbook 的 Task 示例扩展了 Shell。
  • 蛋糕芯里有例子——只要看看那里的其他壳和塔克就行了。我想那本食谱应该更正:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-17
  • 1970-01-01
  • 2014-03-20
  • 2013-06-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多