2012-09-27 3 views
0

우리는 사용자의 컨트롤러에 actionSearchType이있는 경우 다음과 같이 정의되지 않은 변수 모델을 검사 할 때 다음과 같이YII 프레임 워크 : 손님

public function actionSearchType() 
{ 
     if (Yii::app()->user->isGuest == true) 
      $this->render('login'); 
      else 
     $this->render('search_type'); 
    } 

우리 actionLogin 우리의 사용자 컨트롤러에서 것은 :

public function actionLogin() 
{ 
    $model= new Users(); 

    // if it is ajax validation request 
    if(isset($_POST['ajax'])) 
    { 
     echo CActiveForm::validate($model); 
     Yii::app()->end(); 
    } 
$this->redirect(Yii::app()->user->returnUrl); 
        } 
    } 
    // display the login form 
    $this->render('login',array('model'=>$model)); 
} 

목표 인증 된 사용자 만 검색 유형보기에서 옵션을 실행할 수 있도록하는 것입니다. 이 페이지를 실행하면 Undefined variable: model이라는 오류 메시지가 나타납니다.

<div class="form"> 
<?php $form=$this->beginWidget('CActiveForm', array(
'id'=>'login-form', 
'enableClientValidation'=>true, 
'clientOptions'=>array(
    'validateOnSubmit'=>true, 
), 
)); ?> 

<p class="note">Fields with <span class="required">*</span> are required.</p> 

<div class="row"> 
    <?php echo $form->labelEx($model,'username'); ?> 
    <?php echo $form->textField($model,'username'); ?> 
    <?php echo $form->error($model,'username'); ?> 
</div> 

어떤 단계 위의 오류를 해결하는 데 걸리는 제대로 우리가 인증 된 사용자를 확인하기 위해 확인해야 다음과 같이

로그인보기의 조각은 무엇입니까?

갱신 나는 아래 당 로그인 위젯을 렌더링하기 위해 actionSearchType을 변경 :

public function actionSearchType() 
{ 
     if (Yii::app()->user->isGuest) 
      $this->widget('ext.LoginWidget'); 
      else 
     $this->render('search_type'); 
    } 

이 실제로 처음에 볼 수있는 오류를 해결. 새로운 문제는 렌더링 할 때 로그인 위젯의 스타일이 없다는 것입니다. 적절한 스타일 시트 클래스로 태그를 에코해야할까요, 아니면 좀 더 우아한 방법일까요?

답변

2
public function actionSearchType() { 
    if (Yii::app()->user->isGuest) 
    $this->redirect('/user/login'); 

    $this->render('search_type'); 
} 

참고 : 사용자가 손님 인 경우

  • 단순히 사용, 뭔가를 할 경우 (YII : 응용 프로그램() -> 사용자 -> isGuest) {문}

  • 사용자가 로그인 할 때
  • 이 뭔가를 간단하게 사용하는 경우 (YII : 응용 프로그램 (!) -> 사용자 -> isGuest) {문}

두 번째 코드에서 public function actionLogin()을 사용하면 필요한 것보다 2 개 더 닫는 중괄호가 있다고 생각합니다. 어쨌든 로그인 작업은 다음과 같아야합니다.

public function actionLogin() { 
    $formModel = new Login_Form; // Login_Form.php should be in models folder 
    if (isset($_POST['Login_Form'])) { 
     $formModel->attributes = $_POST['Login_Form']; 
     if ($formModel->validate() && $formModel->login()) { 
      $this->redirect('/'); // replace/with stuff like Yii::app()->user->returnUrl 
     } 
    } 
    $this->render('login', array(
     'formModel'=>$formModel, 
    )); 
} 
0

어딘가에 search_typerender() 함수로 넘겨주지 않는 변수 $model을 참조하고 있습니다. 해당 변수를 정의해야합니다. 그렇지 않으면 뷰가 예외를 생성합니다.

나는 당신의 search_type 뷰가 기대되는 모델/클래스 모르지만이 같은 뷰에 넘겨 전에 초기화해야합니다 :이 주제에 대해 다음

$this->render('search_type',array(
    'model' => $model, 
)); 

좋은 읽기 : Understanding the view rendering flow

1

보기를 사용자 로그인 페이지/동작으로 리디렉션하는 대신, 다시 만들 필요가 없습니다.

$this->redirect('login');