【问题标题】:Yii2: How do you use named parameters in console commands?Yii2:你如何在控制台命令中使用命名参数?
【发布时间】:2016-12-13 06:05:57
【问题描述】:

如何编写控制台命令yii controller/action --param1=something --param2=anything 并在操作中检索那些命名参数?

【问题讨论】:

    标签: php console yii2 named-parameters


    【解决方案1】:

    我发现文档确实说明了如何操作,但不是像我预期的那样将其称为“命名参数”,而是称为选项:http://www.yiiframework.com/doc-2.0/guide-tutorial-console.html#create-command

    但文档并不完整。所以这里是一个例子:

    1. 您将参数作为属性添加到控制器:
    class CustomerController extends Controller {
        public $param1;
        public $param2;
        ...
    
    1. 您将options 方法添加到控制器:
        public function options($actionID) {
            return array_merge(parent::options($actionID), ['param1', 'param2']);
        }
    

    必须指定$actionIDparent::options($actionID) 用于包含任何现有选项。

    1. 您现在可以使用$this->param1$this->param2 访问操作中的参数,例如:
        public function actionSomething() {
            doAnything($this->param1, $this->param2);
        }
    

    可以结合非命名参数和命名参数。命名的只需要最后指定。

    文档中还缺少一个事实,如果您指定一个没有值的参数(例如,--param1 而不是--param1=500),$this->param1 的值将是布尔值true。如果根本没有指定,则值为NULL

    【讨论】:

    • 为什么不直接调用parent::options($actionID) 而不是Controller::options($actionID)。如果你重构代码,你就会向这样一个充满伤害的世界敞开心扉。
    • 没想到!但当然,这是一种更好的方法。已调整答案。
    猜你喜欢
    • 1970-01-01
    • 2016-01-29
    • 2016-12-17
    • 2016-03-19
    • 2019-10-13
    • 2016-06-10
    • 2018-03-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多