【发布时间】:2016-01-29 16:17:49
【问题描述】:
我正在尝试在控制器内为具有行为的模型使用自动完成功能。
与:
/** @var ModelName **/
public $ModelName;
它只是自动完成 ModelName 中的任何内容,并且:
/** @var BehaviorNameBehavior **/
public $ModelName;
只是自动完成 BehaviorNameBehavior 中的任何内容,但我认为这有点明显。我查看了 PHPdoc 文档,但没有看到任何方法可以为一个变量指定两个类。
还有一个问题是,在 CakePHP 中,行为函数的第一个参数始终是 (Model $model),但该参数是在 CakePHP 框架内部指定的,并且在调用控制器/模型中的函数时不包括在内。
有人能搞定这个吗?
编辑:添加示例
class ModelName extends AppModel {
public $actsAs = array("BehaviorName");
public function someModelFunction() {}
}
class BehaviorNameBehavior extends ModelBehavior {
public function someBehaviorFunction(Model $model, $param) {}
}
class ControllerNameController extends AppController {
/** @var BehaviorNameBehavior|ModelName $ModelName */
public $uses = array("ModelName");
public function someAction() {
// Type hinting here thinks model should be first parameter but that's not how CakePHP works
$this->ModelName->someBehaviorFunction("some param value");
}
}
【问题讨论】:
-
"而且我看不到任何方法可以为一个变量指定两个类。" 。
/** @var BehaviorNameBehavior|ModelName **/ -
啊,谢谢你,这解决了问题 #1,但它没有解决行为函数中的模型参数。
-
没有线索 - 我自己没有使用 CakePHP,所以如果没有一些代码示例就不能说什么。
-
加了一个例子给大家看看。
-
运气不好。我想到的一般想法都没有奏效。绝对需要有蛋糕经验的人(知道框架足够好)。
标签: cakephp phpstorm phpdoc type-hinting cakephp-2.x