yii模型属性找不到

时间:2013-08-14 17:55:01

标签: php oop yii

我是yii的新手。在SiteController中的默认actionLogin()方法中,我正在搜索where $model->attribtes已定义?

$model->attributes=$_POST['LoginForm'];

我在LoginForm,CFormModel,CModel类中搜索但我找不到。这是一种二传手法吗?

3 个答案:

答案 0 :(得分:4)

http://www.yiiframework.com/doc/guide/1.1/en/form.model#securing-attribute-assignments

创建模型实例后,我们经常需要使用最终用户提交的数据填充其属性。这可以使用以下大量任务方便地完成:

$model=new LoginForm;
if(isset($_POST['LoginForm']))
    $model->attributes=$_POST['LoginForm'];

最后一个语句称为大规模分配,它分配每个条目 $ _POST ['LoginForm']到相应的模型属性。它等同于以下任务:

foreach($_POST['LoginForm'] as $name=>$value)
    {
        if($name is a safe attribute)
            $model->$name=$value;
    }
  

Yii通过实例提供对许多其他内容的访问   变量,例如数据库字段,关系,事件处理程序和   喜欢。这些“属性”是Yii中非常强大的一部分   框架,虽然可以在不理解的情况下使用它们,   一个人不能真正使用全部力量而不进入封面a   位。

attributes是CActiveRecord的属性,是的,它有getter和setter方法

http://www.yiiframework.com/doc/api/1.1/CActiveRecord#attributes-detail

然后您希望看到的位置

https://github.com/yiisoft/yii/blob/1.1.14/framework/db/ar/CActiveRecord.php#L754

答案 1 :(得分:1)

'attributes'属性实际上是模型中的getter / setter方法。将数组传递给它将尝试对这些属性进行“大量”设置。 $ _POST ['LoginForm']中的所有元素都需要在模型中具有相应的属性。在Yii附带的LoginForm模型中,那些设置为属性(即public $username;),attributes属性将为$username分配数组中的关联值({{1} })。

答案 2 :(得分:0)

我打印了class_parents($ model)的输出。它说它继承自CComponent。所以我认为$ attributes属性是在CComponent类的__set()方法中声明的。