2013-08-14 4 views
0

저는 yii를 처음 사용하고 있습니다. SiteController의 기본 actionLogin() 메서드에서 $model->attribtes이 정의 된 곳을 찾고 있습니까? yii 모델 속성을 찾을 수 없습니다

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

나는 LoginForm, CFormModel, CModel 클래스에서 검색하지만 난 찾을 수 없습니다. 그것은 세터 방법인가요? 모델 인스턴스를 만든 후

답변

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의 속성입니다, 그리고 예, 그것은

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

+0

답변 주셔서 감사합니다. 그것은 나를 위해 분명하다. 그러나 나는 아직도 혼란스러워했다. CAvctiveRecord 클래스에는 $ attributes가 아닌 $ _attributes라는 속성이 있습니다. 그런 다음 class_parents ($ model)의 출력을 인쇄했습니다. CComponent에서 상속 받았다고합니다. 그래서 $ 속성 propery CComponent 클래스의 __set() 메서드에서 선언 된 생각합니다. 그러나 나는 이것에 대해 잘 모르겠습니다. – Namal

+2

@Namal [CComponent] (http://www.yiiframework.com/doc/api/1.1/CComponent#__get-detail)의 __get 메서드의 처음 몇 줄을 확인하십시오. $ model-> attributes를 수행하고 $ model-> getAttributes()를 자동으로 호출하려고합니다. –

+0

@Willem. 확인해 주셔서 감사드립니다. – Namal

0

내가 인쇄 볼 수 getter 및 setter 메소드를 가지고 class_parents ($ model)의 출력. CComponent에서 상속 받았다고합니다. 그래서 $ 속성 propery CComponent 클래스의 __set() 메서드에서 선언 된 생각합니다.

1

'attributes'속성은 실제로 모델의 getter/setter 메소드입니다. 배열을 전달하면 해당 속성의 '대량'설정을 시도합니다. $ _POST [ 'LoginForm']의 모든 요소는 모델에 해당 속성이 있어야합니다. Yii와 함께 제공되는 LoginForm 모델에서 해당 모델은 속성 (예 : public $username;)으로 설정되고 attributes 속성은 $username에 배열의 관련 값 ('username'=>'myusername')을 할당합니다.

관련 문제