【问题标题】:Yii: adding an attribute to modelYii:为模型添加属性
【发布时间】:2012-11-14 11:03:29
【问题描述】:

我正在尝试向我的模型(“CustomUser”)添加一个属性,该模型继承了我的模型“User”。

我想在“createUser”表单中使用这个属性作为验证密码字段。我想使用虚拟属性,因为我无法修改只有一个字段“密码”的数据库。

但是,当我尝试获取包含表单的视图时,会显示此错误:

未定义属性“User.password_verification”。

这是发生错误的行:

echo $form->labelEx($user,'password_verification');    
echo $form->textField($user,'password_verification',array('size'=>30,'maxlength'=>40));

我的用户.php:

class User extends CActiveRecord { 
... 

public function rules(){        
  return array(
    array('username, password, email', 'required'),             
    array('created_by', 'numerical', 'integerOnly'=>true),
    array('username, email', 'length', 'max'=>255),
    array('password', 'length', 'max'=>32),
    array('valid_from, valid_until, added_on', 'safe'),             
    array('username, email', 'unique'),
    array('id, type, username, password, email, valid_from, valid_until, 
    added_on,created_by','safe','on'=>'search'),
  );
...
}

我的 CustomUser.php

class CustomUser extends User
{
    public $password_verification;

    public function rules()
    {
        $newRules = array(
                array('password_verification', 'required'),
                array('password_verification', 'length', 'max' => 32),
                array('password', 'compare', 'compareAttribute' => 'password_verification'),
                array('password_verification', 'safe', 'on' => 'search'),
        );
        return array_merge(User::model()->rules(), $newRules);
    }
}

你认为我的rules() 函数有问题吗?您知道可能是什么问题吗?

【问题讨论】:

  • 您是否在customuser 或user 中为$password_verification 声明了任何属性标签?
  • 我在 CustomUser.php 中声明了 public $password_verification;
  • 在您的表单中 $user 属于 customuser 或 user 的哪一种类型?
  • 我认为你必须在你的模型中将password_verification定义为public,然后才能作为属性访问。

标签: forms yii


【解决方案1】:

这样定义:

class User extends CActiveRecord { 

 $password_verification

 ....

然后您的模型将能够访问此属性,因为您已将其定义为公共属性,该属性将用作 Active Record 的属性。

【讨论】:

    【解决方案2】:

    错误

    未定义属性“User.password_verification”

    表示您将User 模型传递给您的视图,但$password_verification 属性仅存在于CustomUser 模型中。

    【讨论】:

      【解决方案3】:

      谢谢大家的回答。

      最后我犯了一个大错误...-__-

      我在视图中使用了 User 而不是 CustomUser(我专注于 actionCreate,我忘记了 actionIndex()...)

      对不起。

      祝你有美好的一天

      迈克尔

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-16
        • 1970-01-01
        • 2013-04-14
        • 1970-01-01
        • 1970-01-01
        • 2014-12-10
        • 1970-01-01
        相关资源
        最近更新 更多