アクションの作成

モデルを持った時点で、モデルを操作するために必要なロジックを書き始める事ができます。 このロジックはコントローラアクションの中に記述します。 例えばログインフォームのために必要なコードは下記の様になります:

public function actionLogin()
{
    $model=new LoginForm;
    if(isset($_POST['LoginForm']))
    {
        // ユーザの入力データの収集
        $model->attributes=$_POST['LoginForm'];
        // ユーザの入力の検証、検証が通った際は前のページへリダイレクト
        if($model->validate())
            $this->redirect(Yii::app()->user->returnUrl);
    }
    // ログインフォームの表示
    $this->render('login',array('model'=>$model));
}

上記の様に、はじめに LoginForm モデルのインスタンスを作成します。 もしリクエストが POST リクエストであった場合 (ログインフォームが送信された事を意味します)、$model の中へ送信されたデータ $_POST['LoginForm'] を入れます。 そして入力を検証し、成功した場合はユーザのブラウザを前に認証が必要とされたページへリダイレクトします。 もし検証が失敗した場合、またはアクションが直接アクセスされた場合は、次の節で内容を述べる login ビューを表示します。

ヒント: login アクションの中で、前に認証が必要とされたページを Yii::app()->user->returnUrl によって取得しています。 Yii::app()->user コンポーネントは、CWebUser (或いはその派生) クラスで、ユーザのセッション情報 (例えばユーザ名、ステータス) を表します。 詳細は 認証と権限付与 を参照して下さい。

login アクションに現れる下記の PHP 文に特に注目しましょう:

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

属性への代入を安全にする で述べたように、このコードはユーザの送信データをモデルに代入しています。 CModel で定義されている attribute プロパティは、"名前-値" が対になった配列を想定しており、対応するモデルの属性に値を割り当てるものです。 そのため、$_POST['LoginForm'] がこの様な配列として与えられた場合は、(全ての必要な属性が配列に含まれていると仮定すると) 上記のコードは下記の長ったらしいコードと等価値になります。

$model->username=$_POST['LoginForm']['username'];
$model->password=$_POST['LoginForm']['password'];
$model->rememberMe=$_POST['LoginForm']['rememberMe'];

注意: $_POST['LoginForm'] から文字列ではなく配列を受け取るためには、ビューの入力フィールドに名前を付ける際に、規約を守らなければなりません。 具体的に説明すると、C というモデルクラスの a という属性に対応する入力フィールドには C[a] という名前をつけます。 例えば、username 属性に対応する入力フィールド には、LoginForm[username] という名前を使用します。

これで、残りのタスクは、必要な入力フィールドを持つ HTML フォームを含んだ login ビューの作成だけになりました。

$Id$

Be the first person to leave a comment

Please to leave your comment.