PhpStorm无法自动完成模型属性
我只是希望PhpStorm在使用find(),findAll(),findByAttributes()等时自动完成模型的属性…
我有一个模型: /** * member model parameters: * @property integer $id * @property integer $city_id * @property string $e_mail */ class Member extends CActiveRecord { /** * @static * @param string $className * @return Member */ public static function model($className = __CLASS__) { return parent::model($className); } ... 当我使用活动记录方法时: $member = Member::model()->findByAttributes(array('e_mail'=>'Foo Bar')); 并在我写这篇文章时尝试自动完成: $member-> 它只给出了CActiveRecord在列表中的参数和方法. 我试图改变 /** * Finds a single active record that has the specified attribute values. * See {@link find()} for detailed explanation about $condition and $params. * @param array $attributes list of attribute values (indexed by attribute names) that the active records should match. * An attribute value can be an array which will be used to generate an IN condition. * @param mixed $condition query condition or criteria. * @param array $params parameters to be bound to an SQL statement. * @return CActiveRecord the record found. Null if none is found. */ public function findByAttributes($attributes,$condition='',$params=array()) {... 这个方法从CActiveRecord返回给成员,自己,父,$this,孩子等等… 如果有人知道解决方案(最好不要改变框架核心方法),我会很高兴. 解决方法
注意:所有我真棒的Yii代码都可以在
bitbucket的存储库
here和
here中免费获得.如果你讨厌Yii的详细程度,请查看我的
Pii课程.我想你会完全挖掘它.
我遇到了这个,我做的是增加静态模型()方法的phpdoc.这可以解决问题,自动完成工作正常. 例如: class MyModel extends CActiveRecord { /** * @static * @param string $className * @return MyModel|CActiveRecord */ public static function model($className=__CLASS__) { .... yada yada yada ... } } 请注意管道和附加类添加到“@return”.这告诉PhpStorm还在自动完成查找中包含该类. 另外一个注意事项,如果您使用名称空间,则可能需要在某些类名前面加斜杠.只取决于您的项目和包括. ===============更新时间:2013-08-05 =============== 使用PhpStorm v6及更高版本,看起来您可以使用: * * @return $this * 并获得适当的自动完成. 另外,整个静态“model()”方法是过时的(如Yii),我有一个基本模型类,我现在用于所有项目.它包含静态模型方法;然后在我的每个子类中不再需要它.这是一个例子…… <?php namespace MyAwesomeNameSpace; /** * MyBaseModel * etc.etc. */ class MyBaseModel extends CActiveRecord { /** * Returns the static model of the specified AR class. * * @param string $className * * @return $this */ public static function model( $className = null ) { return parent::model( $className ? : get_called_class() ); } //code code code code } /** * MySubModel */ class MySubModel extends MyBaseModel { /** * {@InheritDoc} */ public function tableName() { return 'my_sub_table'; } } $_models = MySubModel::model()->findAll( 'xyz = :xyz',array( ':xyz' => 'abc' ) ); if ( !empty( $_models ) ) { foreach ( $_models as $_model ) { // Do awesome stuff... } } 自动完成适用于所有子类… 只是想我会更新这个,让你们都知道. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |