ホームページ  >  記事  >  バックエンド開発  >  PHP YII フレームワーク開発のヒント: モデル (モデル) のカスタム検証ルール、yiirules_PHP チュートリアル

PHP YII フレームワーク開発のヒント: モデル (モデル) のカスタム検証ルール、yiirules_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-12 09:04:411497ブラウズ

PHP YII フレームワーク開発のヒント: モデル (モデル) のルール カスタム検証ルール、yiirules

YII のモデルのルール部分は、一部のフォームの検証ルールであり、対応するビュー (ビュー) でのフォーム検証に非常に役立ちます。 ) にフォームが追加されている場合、フォームが送信される前に、プログラムは有効な制限ルールに合格した場合にのみ送信できます。これにより、フォームとそのセキュリティが効果的に確保されます。情報の有効性。詳しい説明をさせていただきます:

以下はビュー部分の簡単なコードです:

リーリー

モデルのルール部分の簡単なコード:

リーリー

システムにはデフォルトで次の検証ルールがあります:

boolean: CBool​​eanValidator のエイリアス。プロパティの値が CBool​​eanValidator::trueValue または CBool​​eanValidator::falseValue であることを確認します。 captcha : CCaptchaValidator のエイリアス。属性の値が CAPTCHA によって表示される検証コードと等しいことを確認します。 Compare : CCompareValidator のエイリアス。プロパティの値が別のプロパティまたは定数と等しいことを確認します。 email : CEmailValidator のエイリアス。属性の値が有効なメール アドレスであることを確認します。 default : CDefaultValueValidator のエイリアス、属性にデフォルト値を割り当てます。 exist : CExistValidator のエイリアス。指定されたデータ テーブル フィールドに属性値が存在することを確認します。 file : CFileValidator のエイリアス。属性にアップロードされたファイルの名前が含まれていることを確認します。 filter: CFilterValidator のエイリアス。属性を変換するためにフィルターを使用します。 in : CRangeValidator のエイリアス。属性が事前に決定された値のリストに確実に表示されるようにします。 length : CStringValidator のエイリアス。属性の長さが指定された範囲内であることを保証します。 match : CRegularExpressionValidator のエイリアス。属性が正規表現と一致することを確認します。 数値 : CNumberValidator のエイリアス。属性が有効な数値であることを確認します。 required: CRequiredValidator のエイリアス。属性が空でないことを保証します。 type : CTypeValidator のエイリアス。属性が指定されたデータ型であることを確認します。 unique : CUniqueValidator のエイリアス。データ テーブル フィールド内で特性が一意であることを保証します。 url : CUrlValidator のエイリアス。属性が有効なパスであることを確認します。

基本的には比較的包括的であり、一般的なもので十分ですが、一部の検証はまだカスタマイズする必要がある場合があります。上記のコードを例に挙げると、TAG を追加するときに、TAG がシステムにすでに存在するかどうかを確認する必要があります。存在する場合、ユーザーはそのタグを追加できません。これには、データベースを追加する前にデータベースにクエリを実行して、TAG がすでに存在するかどうかを確認する必要があります。ここでは、検証ルールをカスタマイズする必要があります。



重要なのは、次の 2 つのステップを持つことです:


1. ルールにコードを追加します: array('tagname', 'checktagname', 'on'=>'create,update'), //TAGを挿入するときに、タグがすでに存在するかどうかを確認します


注: 「on」=​​>「create,update」を使用したため、この検証ルールは作成、更新シナリオで有効になります


2. モデルに検証機能を追加します:

リーリー

説明する必要があるのは次のとおりです:

(1) 検証関数のパラメータは ($attribute, $params) である必要があり、いずれか 1 つでも欠けることはできません。

(2)$this->addError($attribute, 'タグはすでに存在します!'); これはビューに出力するエラー メッセージです。

この方法では、フォーム検証に必要なルールをすべてカスタマイズできます。

以下では Yii カスタム検証ルールを紹介します

検証ルールを定義する最も簡単な方法は、それを使用するモデル内で定義することです。

ユーザーのパスワードが十分に安全かどうかを確認したいとします。

通常、検証には C RegularExpression メソッドを使用しますが、このガイドでは、この検証メソッドは存在しないものと仮定します。

まずモデルに 2 つの定数を追加します


const WEAK = 0;

const STRONG = 1 次に、モデルのルールメソッドに設定します。 リーリー

作成したルールが既存のルールではないことを確認してください。そうでない場合は、エラーが報告されます。

ここで行う必要があるのは、上で入力したルールの名前 (つまり、passwordStrength) を使用してモデル内にメソッドを作成することです。

リーリー

作成したメソッドには 2 つのパラメータが必要です: * $attribute 検証する必要がある属性 * $params ルールでカスタマイズされたパラメータ

モデルのルールメソッドではパスワード属性を検証するため、検証ルールで検証する必要がある属性値はパスワードである必要があります。

rules メソッドでは、カスタム パラメーターの強度も設定し、その値は $params 配列に配置されます。

CModel::addError() を使用していることがわかります。

エラーの追加は 2 つのパラメーターを受け入れます。最初のパラメーターはフォームに表示されるエラーの属性名で、2 番目のパラメーターは表示されるエラー メッセージです。

完全なメソッド: CValidator クラスを継承します

複数のモデルでルールを使用する場合、最良の方法は CValidator クラスを継承することです。

继承这个类你可以使用像 CActiveForm::$enableClientValidation (Yii 1.1.7 版本后可用) 类似的其他功能。

创建类文件

首先要做的是创建类文件.最好的方法时类的文件名和类名相同,可以使用 yii 的延迟加载(lazy loading)功能。

让我们在应用(application)的扩展(extensiions)目录(在 protected 文件夹下)下新建一个文件夹.

将目录命名为: MyValidators

然后创建文件: passwordStrength.php

在文件中创建我们的验证方法

class passwordStrength extends CValidator
{
  public $strength;
  private $weak_pattern = '/^(?=.*[a-zA-Z0-9]).{5,}$/';
  private $strong_pattern = '/^(?=.*\d(?=.*\d))(?=.*[a-zA-Z](?=.*[a-zA-Z])).{5,}$/';
...
}

在类中创建属性,此属性为在验证规则中使用的参数.

CValidator 会自动根据参数来填充这些属性.

我们也创建了两个其他的属性,它们为 preg_match 函数使用的正则表达式.

现在我们应该重写父类的抽象方法(abstract method) validateAttribute

/**
 * Validates the attribute of the object.
 * If there is any error, the error message is added to the object.
 * @param CModel $object the object being validated
 * @param string $attribute the attribute being validated
 */
protected function validateAttribute($object,$attribute)
{
  // check the strength parameter used in the validation rule of our model
  if ($this->strength == 'weak')
   $pattern = $this->weak_pattern;
  elseif ($this->strength == 'strong')
   $pattern = $this->strong_pattern;
  // extract the attribute value from it's model object
  $value=$object->$attribute;
  if(!preg_match($pattern, $value))
  {
    $this->addError($object,$attribute,'your password is too weak!');
  }
}

上面的方法我认为就不用解释了.当然你也可以在 if 的条件中使用常量,我推荐使用.

www.bkjia.comtruehttp://www.bkjia.com/PHPjc/1072188.htmlTechArticlePHP YII框架开发小技巧之模型(models)中rules自定义验证规则,yiirules YII的models中的rules部分是一些表单的验证规则,对于表单验证十分有用,在...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。