3

タイトルが示すように、Yii のフィルターの主な目的は何ですか? 私は Yii の初心者で、フィルタとバリデータについて少し混乱していますか? 誰でも私のためにそれを説明できますか?

4

3 に答える 3

7

バリデーターは、モデル内の属性が本来あるべき状態であることを検証します: 整数、日付、指定されたサイズ未満、...

例:

public function rules()
{
    return array(
        //username and password are required
        array('username, password', 'required'),
        //myInt is a number between 0 and 255
        array('myInt', 'numerical', 'min'=>0, 'max'=> 255),
    );
}

$model->validate()またはを呼び出すと、検証ルールがテストされ$model->save()ます。バリデーターの 1 つがパスしなかった場合、エラーがユーザーにスローされます。

呼び出すことでスローされたエラーを知ることができます$model->getErrors()

出典:モデル ルールの検証

フィルタの定義は次のとおりです。

アクションの実行前後にフィルタを適用できます。アクションが実行するコンテキストを変更したり、アクションが生成する結果を装飾したりできます。

したがって、基本的には、コントローラーメソッドを呼び出す前 (画面に何かをレンダリングする前) またはコントローラーが完了した後 (データが検証されてデータベースに追加された後) にいくつかの作業を実行します。例として、次のように言えます。

  • ユーザー権限の確認
  • HTTP キャッシングを実装する
  • ...

アクションにフィルターを適用するには、CController::filters() メソッドをオーバーライドする必要があります。このメソッドは、フィルター構成の配列を返す必要があります。例えば、

public function filters()
{
    return array(
       'postOnly + edit, create',
        array(
            'application.filters.PerformanceFilter - edit, create',
            'unit'=>'second',
        ),
    );
}

プラス演算子とマイナス演算子を使用して、フィルターを適用するアクションと適用しないアクションを指定できます。上記では、postOnlyフィルタはeditおよびcreateアクションに適用されますが、フィルタはおよびPerformanceFilterを除くすべてのアクションに適用されます。フィルター構成にプラスもマイナスも表示されない場合、フィルターはすべてのアクションに適用されます。editcreate

出典: CFilter に関する Yii APIYii ガイド

したがって、一部のデータを検証する場合はバリデーターを使用し、実行したいことがモデルに依存しない場合 (つまり、ユーザーがログインしているかどうかを確認するなど) は、フィルターを実装する必要があります。一般に、フィルターとバリデーターの違いは明らかです。

于 2013-01-30T08:39:43.833 に答える
3

バリデーターは、db で間違ったデータを挿入または更新するのを防ぐために使用されます。フィルターを使用して、検証の前または後に何らかの準備を行うことができます

class LoginForm extends CFormModel
{
    public $mail;
    public $password;
    public $rememberMe;

    public function rules()
    {
        return array(
            array('mail, password', 'filter'=>'trim'),
            array('mail', 'filter'=>'mb_strtolower'),
            array('mail, password', 'required'),
            array('mail', 'email'),
            array('rememberMe', 'boolean'),
            array('password', 'authenticate'),
        );
    }
}
于 2013-01-30T08:53:48.597 に答える
1

フィルタ は、主に URL をフィルタリングするために使用されます。ここには accessControl も含まれています。これは、任意のアクションにアクセスするように URL を設定する場合を意味します。次に、それらのフィルターは、それらのユーザーに対してアクションが許可されているかどうかを確認しました。また、このコントローラーの削除アクションを POST メソッドでのみアクセスできるように設定すると、GET メソッドを使用して削除することはできなくなります。それらのすべてのタイプのアクセス....フィルターによって制御されます。

一方、バリデーターは、希望どおりに入力された入力を検証するために使用されます。Minimum 、 Maximum 、 Integer かどうか、それが Unique かどうか、このフィールドが必須かどうか。このフィールドは電子メールタイプになるかどうか......そして、入力フィールドの検証のより多くのタイプ.....

単一の単語では、「バリデータは入力の検証に使用され、フィルターは出力の検証に使用されます」と言うことができます

于 2013-01-30T09:06:06.443 に答える