【发布时间】:2016-12-13 06:05:57
【问题描述】:
如何编写控制台命令yii controller/action --param1=something --param2=anything 并在操作中检索那些命名参数?
【问题讨论】:
标签: php console yii2 named-parameters
如何编写控制台命令yii controller/action --param1=something --param2=anything 并在操作中检索那些命名参数?
【问题讨论】:
标签: php console yii2 named-parameters
我发现文档确实说明了如何操作,但不是像我预期的那样将其称为“命名参数”,而是称为选项:http://www.yiiframework.com/doc-2.0/guide-tutorial-console.html#create-command
但文档并不完整。所以这里是一个例子:
class CustomerController extends Controller {
public $param1;
public $param2;
...
options 方法添加到控制器: public function options($actionID) {
return array_merge(parent::options($actionID), ['param1', 'param2']);
}
必须指定$actionID,parent::options($actionID) 用于包含任何现有选项。
$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)。如果你重构代码,你就会向这样一个充满伤害的世界敞开心扉。