タイトルが示すように、Yii のフィルターの主な目的は何ですか? 私は Yii の初心者で、フィルタとバリデータについて少し混乱していますか? 誰でも私のためにそれを説明できますか?
3 に答える
バリデーターは、モデル内の属性が本来あるべき状態であることを検証します: 整数、日付、指定されたサイズ未満、...
例:
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
を除くすべてのアクションに適用されます。フィルター構成にプラスもマイナスも表示されない場合、フィルターはすべてのアクションに適用されます。edit
create
出典: CFilter に関する Yii APIとYii ガイド
したがって、一部のデータを検証する場合はバリデーターを使用し、実行したいことがモデルに依存しない場合 (つまり、ユーザーがログインしているかどうかを確認するなど) は、フィルターを実装する必要があります。一般に、フィルターとバリデーターの違いは明らかです。
バリデーターは、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'),
);
}
}
フィルタ は、主に URL をフィルタリングするために使用されます。ここには accessControl も含まれています。これは、任意のアクションにアクセスするように URL を設定する場合を意味します。次に、それらのフィルターは、それらのユーザーに対してアクションが許可されているかどうかを確認しました。また、このコントローラーの削除アクションを POST メソッドでのみアクセスできるように設定すると、GET メソッドを使用して削除することはできなくなります。それらのすべてのタイプのアクセス....フィルターによって制御されます。
一方、バリデーターは、希望どおりに入力された入力を検証するために使用されます。Minimum 、 Maximum 、 Integer かどうか、それが Unique かどうか、このフィールドが必須かどうか。このフィールドは電子メールタイプになるかどうか......そして、入力フィールドの検証のより多くのタイプ.....
単一の単語では、「バリデータは入力の検証に使用され、フィルターは出力の検証に使用されます」と言うことができます