0

I am new to yii. In default actionLogin() method in SiteController, I am searching for where $model->attribtes is defined?

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

I searched in LoginForm, CFormModel, CModel classes but I couldn't find. Is it a setter method?

4

3 回答 3

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 框架中一个非常强大的部分,尽管可以在不了解的情况下使用它们,但如果不深入了解一下,就无法真正使用它们的全部功能。

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

于 2013-08-14T18:37:54.393 回答
1

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

于 2013-08-16T06:48:11.963 回答
0

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

于 2013-08-15T14:26:17.460 回答