Yiiでカスタムバリデーターの作成と使用により、組み込みのバリレーションルールを超えて特定の検証ルールを実施できます。これは、ビジネスロジックを実装したり、一意の検証要件を処理するために重要です。一般に、このプロセスには、 yii \ validators \ balidator
classを拡張し、 validateattribute()
メソッドをオーバーライドします。作成方法と使用方法は次のとおりです。 yii \ balidators \ validatorを使用します。クラスAlphanumerunderScoreValidator extends validator {public function validateAttribute($ model、$属性){$ value = $ model-> $属性; if(!preg_match( '/^[a-za-z0-9_] $/'、$ value)){$ this-> adderror($ model、$属性、 '英数字とアンダースコアのみが許可されます。'); }}}
今、モデル:
<code class="php"> app \ balidators \ alphanumerunderscorevalidatorを使用します。クラスmyModel拡張\ yii \ db \ activerecord {public function rules(){return [['username']、 'nefign']、[['username']、alphanumericunderscorevalidator :: class]、]; }} </code>
このコードは、正規式を使用して入力を確認する alphanumericunderscorevalidator
を定義します。モデルのルール()
メソッドは、 username
属性にこのカスタムバリデーターを使用します。検証が失敗した場合、指定されたエラーメッセージが表示されます。主要なベストプラクティスを次に示します。
{属性}
のようなプレースホルダーを使用して、属性名を動的に挿入します。 validateAttribute()
メソッドにライブラリの機能を組み込むことが含まれます。たとえば、YIIの組み込みバリデーターよりも厳密に電子メールアドレスを検証するためにライブラリを使用している場合、このように組み込むことができます。 SomethirdPartyEmailValidatorを使用します。 //ライブラリのクラスに置き換えますstrictemailvalidator extends balibator {public function validateAttribute($ model、$属性){$ value = $ model-&gt; $属性; $ validator = new SomethirdPartyEmailValidator(); //サードパーティのバリデーターをインスタンス化するif(!$ validator-&gt; isvalid($ value)){$ this-&gt; adderror($ model、$属性、 'nivalidメールアドレス。'); }}} プロジェクトの依存関係に必要なライブラリを含めることを忘れないでください(たとえば、作曲家を使用)。サードパーティライブラリからの適切なエラー処理とドキュメントは、統合を成功させるために不可欠です。
カスタムバリッター内のさまざまなデータ型を処理することは、柔軟性と正確性に重要です。バリデーターは、さまざまな入力タイプを優雅に処理し、タイプのミスマッチに適切なエラーメッセージを提供する必要があります。
validateattribute()
メソッド内でタイプチェックを使用して達成できます。たとえば、
<code class="php"> yii \ balidators \ balidatorを使用します。クラスMyCustomValidator拡張balidator {public function validateAttribute($ model、$属性){$ value = $ model-&gt; $属性; if(is_string($ value)){// string固有の検証ロジックif(strlen($ value)&lt; 5){$ this-&gt; adderror($ model、$属性、 'stringは少なくとも5文字の長さでなければなりません。'); }} elseif(is_integer($ value)){// integer固有の検証ロジックif($ value&lt; 0){$ this-&gt; adderror($ model、$属性、 'integerは無側陽性でなければなりません。'); }} else {$ this-&gt; adderror($ model、$属性、 '無効なデータ型。'); }}} </code>
この例は、文字列と整数の両方の処理を示しています。 elseifif
ブロックを追加すると、追加のデータ型をサポートできます。予期しないエラーを防ぐために、入力がnullまたは予期しないタイプのケースを処理することを忘れないでください。データ型の問題についてユーザーに通知するには、クリアエラーメッセージが不可欠です。
以上がYiiでカスタムバリデーターを作成および使用するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。