gpt4 book ai didi

PhpStorm 无法自动完成模型属性

转载 作者:行者123 更新时间:2023-12-02 15:28:48 24 4
gpt4 key购买 nike

只是我希望 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 到 Member、self、parent、$this、child 等...自动完成功能仅在“成员(member)”时有效。但此方法适用于所有模型,而不仅仅是成员(member)模型,因此这不是一个解决方案。

如果有人知道解决方案(最好不改变框架核心方法),我会很高兴。

最佳答案

注意:我所有很棒的 Yii 代码都可以在 bitbucket 上免费获得。在存储库中herehere 。如果你讨厌 Yii 的冗长,请查看我的 Pii 类。我想你会完全喜欢它。

我遇到了这个问题,我所做的就是为静态 model() 方法增强 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 My\Awesome\Name\Space;

/**
* 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...
}
}

自动完成功能适用于所有子类...

我只是想更新一下并让大家知道。

关于PhpStorm 无法自动完成模型属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10768296/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com