0

次のように、ユーザーコントローラーにactionSearchTypeがあります。

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');
    }

これは確かに最初に見られたエラーを解決しました。新しい問題は、レンダリング時にログインウィジェットのスタイルが設定されていないことです。タグを適切なスタイルシートクラスでエコーする必要がありますか、それとももう少しエレガントな方法がありますか?

4

3 に答える 3

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

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

ノート:

  • ユーザーがゲストのときに何かを行うには、if(Yii :: app()-> user-> isGuest){ステートメント}を使用するだけです。

  • ユーザーがログインしているときに何かを行うには、if(!Yii :: app()-> user-> isGuest){ステートメント}を使用するだけです。

2番目のコードであるpublicfunctionactionLogin()では、必要以上に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,
    ));
}
于 2012-09-27T19:41:49.177 に答える
1

ビューをレンダリングする代わりに、ユーザー ログイン ページ / アクションにリダイレクトするので、再作成する必要はありません。

$this->redirect('login');
于 2012-09-27T17:38:40.077 に答える
0

render()関数に渡さないsearch_type変数をどこかで参照しています。その変数を定義する必要があります。そうしないと、ビューで例外が作成されます。$model

ビューが期待しているモデル/クラスはわかりませんがsearch_type、次のようにビューに渡す前に初期化する必要があります。

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

このトピックについてよく読んでください:ビューのレンダリング フローを理解する

于 2012-09-27T17:31:09.800 に答える