0

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,以便可以$this->params['verbose']按照 Cookbook 使用,但出现错误:未定义索引:详细。

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 不应该为我做那件事吗?

4

1 回答 1

0

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

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

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

于 2013-08-09T08:14:25.173 回答