検索
ホームページバックエンド開発PHPチュートリアルThinkPHP の create() メソッドの自動検証について

次に、ThinkPHP の create() メソッドの自動検証の例を示します。内容がとても良かったので、参考としてシェアさせていただきます。

自動検証は、ThinkPHP モデル層によって提供されるデータ検証方法であり、create を使用してデータ オブジェクトを作成するときにデータ検証を自動的に実行できます。

原則:

##create() メソッドは、フォーム ($_POST) 情報を収集して返します。同時に、フォームの自動検証をトリガーし、不正なフィールドをフィルタリングします。

コントローラーで create() メソッドを使用すると (戻り値は true/false)、モデル クラスの $_validate 属性が自動的にトリガーされます (これは、親クラス Model、サブクラス Rewrite in Model) で、create() メソッドにデータがなく戻り値が false の場合、$_validate で検証ルールをカスタマイズします (検証ルールについては後で詳しく説明します)。エラーメッセージ!

自動検証の使用は、次のルール形式に従って定義する必要があります:

protected $_validate = array(  
 array(验证字段1,验证规则,错误提示,[验证条件,附加规则,验证时间]), 
 array(验证字段2,验证规则,错误提示,[验证条件,附加规则,验证时间]),
  ......
);

ここで検証フィールド、検証ルール、エラー プロンプトは必須です。検証条件、追加ルール、および検証時間はオプションです。

検証フィールド (必須): フォームフィールド。

検証ルール (必須): 必須フィールドには、電子メール アドレス、URL URL アドレス、および番号を含める必要があります。追加のルールと組み合わせて使用​​することもできます。

エラー プロンプト (必須): 検証が失敗した場合に返されるプロンプト メッセージ。

検証条件 (オプション): 0、1、2 の 3 つのタイプがあります。0: _POST に存在するフィールド検証、デフォルト。1: 検証ルールが定義されている場合は検証が必要です。値は空ではありません。検証、定義済み 検証ルールは正規表現です (デフォルト)

function 関数検証、定義済みの検証ルールは関数名です

callbackconfirmequalnotequal##in 定義された検証ルールは、配列またはカンマ区切りの文字列にすることができます。notin特定の範囲内にあるかどうかを検証します。特定の範囲内では、定義された検証ルールは配列またはカンマ区切りの文字列 (バージョン 3.1.2 の新機能) length検証の長さ、定義 検証ルールは、数値 (固定長を表す) または数値の範囲 (たとえば、3,12 は長さの範囲を表す) にすることができます。 3 から 12 までの長さ) betweenValidation range 、定義された検証ルールは範囲を表し、1、31、または 1、31 などの文字列または配列を使用できます。 array(1,31)notbetween検証は特定の範囲内にありません。定義された検証ルールは範囲を表します。文字列または配列を使用できます (新機能)バージョン 3.1.2) expire 有効期間内であるかどうかを検証します。定義された検証ルールは、その時点までの時間範囲を示します。たとえば、2012-1-15、2013-1-15 を使用して、現在の送信有効期間が 2012-1-15 から 2013-1-15 までであることを示すこともできます。また、タイムスタンプ定義 IP が許可されているかどうかを確認します。定義された検証ルールは、201.12.2.5,201.12.2.6 のように、カンマで区切られた許可された IP アドレスのリストを表します。 IP が禁止されているかどうかを確認します。定義された検証ルールは、201.12.2.5,201.12.2.6## のように、カンマで区切られた禁止された IP アドレスのリストを表します。 #unique 一意であるかどうかを確認するために、システムはフィールドの現在の値に基づいてデータベースにクエリを実行し、フォーム データに同じ値が存在するかどうかを判断します。主キー フィールドが含まれています。unique を使用して主キー フィールド自体を決定することはできません

验证时间(可选):共有1,2,3三种,1:新增数据时候验证;2:编辑数据时候验证;3:全部情况下验证(默认);也可以可以根据业务需要增加其他的验证时间

下面附上代码:以注册为例

前台页面比较简单,代码就不贴出来了,下面是前台注册界面截图

控制器代码:

//注册
 public function register(){
  $user = new \Model\UserModel();

  //两个逻辑:收集,展示
  if (!empty($_POST)) {
  
  //create()方法收集表单($_POST)信息并返回,同时触发表单自动验证,过滤非法字段
  $date = $user->create();
  //通过create()方法的返回值$date判断验证是否成功
  if ($date) { //返回实在数据的时候才进行添加
   //implode()把数组变为字符串
   $date['user_hobby'] = implode(',', $date['user_hobby']);
   $info = $user->add($date);
   if ($info) {
   
   //跳转首页   
   $this->redirect('Index/index');
   }
  }else{

   //把错误信息分配到前台模板
   $error = $user->getError();
   $this->assign('error',$error);
  }
  }
  //调用view视图
  $this->display();
 }

模型类代码:

class UserModel extends Model{
 
 //是否批量处理验证,批量获取全部的错误验证信息
 protected $patchValidate = true; //默认为false

 //自动验证定义
 protected $_validate = array(

  //array(字段,验证规则,错误提示,验证条件,附加规则,验证时间)
  //①用户名验证,不能为空
  array('username','require','用户名不能为空'),
  array('username','','该用户名已经被占用','0','unique'),
  //②密码验证,不为空
  array('password','require','密码不能为空'),
  //③验证确认密码,必须填写,与密码保持一致
  array('password2','require','确认密码必须填写'),
  array('password2','password','两次密码保持一致',0,'confirm'),
  //④邮箱验证
  array('user_email','email','邮箱格式不正确',2),
  //⑤qq验证,数字组成,5-12位
  array('user_qq','number','qq必须是数字'),
  array('user_qq','5,12','位数在5-12位之间',0,'length'),
  //⑥学历验证,必须选一个
  array('user_xueli','2,5','学位必须选择一个',0,'between'),
  //⑦爱好验证,必须选择二个以上
  //因为爱好返回的是数组,附加规则中没有可以直接用的规则,所以需自定义方法,用callback方法验证
  array('user_hobby','check_hobby','爱好必须选两项或以上',1,'callback'),
  );

 //定义方法进行爱好验证
 //参数$arg代表被验证的表单信息
 function check_hobby($arg)
 {
  //判断数组长度是否大于2
  if (count($arg)<2) {
   return false; //会自动输出验证错误信息
  }
  return true;
 }
}

把验证的错误信息在模板中给展示出来(部分代码)

<td style="width:13%; text-align: right;">
 <label for="User_username" class="required">用户名 
 <span>*</span></label>
</td>

<td style="width:87%;">
 <input class="inputBg" size="25" name="username" id="User_username" type="text" value="" />     
 <span style="color:red;"><{$error.username|default:""}></span>
</td>

结果:

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

对THINKPHP的addAll支持的最大数据量的分析

关于ThinkPHP CURD方法之table方法

关于ThinkPHP利用getlist方法实现数据搜索功能的分析

メソッド検証、定義された検証ルールが現在のモデル クラスのメソッドである
2 つのメソッドが一致しているかどうかを検証します。フォーム内のフィールド 同じです。定義された検証ルールはフィールド名
であり、特定の値と等しいかどうかを検証します。この値は、以前の検証ルール
以前の検証ルール (バージョン 3.1.2 の新機能) で定義された特定の値と等しくないかどうかを検証します。
# を使用することもできます。 ##ip_allow
ip_deny

以上がThinkPHP の create() メソッドの自動検証についての詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
誇大広告を超えて:今日のPHPの役割の評価誇大広告を超えて:今日のPHPの役割の評価Apr 12, 2025 am 12:17 AM

PHPは、特にWeb開発の分野で、最新のプログラミングで強力で広く使用されているツールのままです。 1)PHPは使いやすく、データベースとシームレスに統合されており、多くの開発者にとって最初の選択肢です。 2)動的コンテンツ生成とオブジェクト指向プログラミングをサポートし、Webサイトを迅速に作成および保守するのに適しています。 3)PHPのパフォーマンスは、データベースクエリをキャッシュおよび最適化することで改善でき、その広範なコミュニティと豊富なエコシステムにより、今日のテクノロジースタックでは依然として重要になります。

PHPの弱い参照は何ですか、そしていつ有用ですか?PHPの弱い参照は何ですか、そしていつ有用ですか?Apr 12, 2025 am 12:13 AM

PHPでは、弱い参照クラスを通じて弱い参照が実装され、ガベージコレクターがオブジェクトの回収を妨げません。弱い参照は、キャッシュシステムやイベントリスナーなどのシナリオに適しています。オブジェクトの生存を保証することはできず、ごみ収集が遅れる可能性があることに注意する必要があります。

PHPで__invoke Magicメソッドを説明してください。PHPで__invoke Magicメソッドを説明してください。Apr 12, 2025 am 12:07 AM

\ _ \ _ Invokeメソッドを使用すると、オブジェクトを関数のように呼び出すことができます。 1。オブジェクトを呼び出すことができるように\ _ \ _呼び出しメソッドを定義します。 2。$ obj(...)構文を使用すると、PHPは\ _ \ _ Invokeメソッドを実行します。 3。ロギングや計算機、コードの柔軟性の向上、読みやすさなどのシナリオに適しています。

同時性については、PHP 8.1の繊維を説明します。同時性については、PHP 8.1の繊維を説明します。Apr 12, 2025 am 12:05 AM

繊維はPhp8.1で導入され、同時処理機能が改善されました。 1)繊維は、コルーチンと同様の軽量の並行性モデルです。 2)開発者がタスクの実行フローを手動で制御できるようにし、I/O集約型タスクの処理に適しています。 3)繊維を使用すると、より効率的で応答性の高いコードを書き込むことができます。

PHPコミュニティ:リソース、サポート、開発PHPコミュニティ:リソース、サポート、開発Apr 12, 2025 am 12:04 AM

PHPコミュニティは、開発者の成長を支援するための豊富なリソースとサポートを提供します。 1)リソースには、公式のドキュメント、チュートリアル、ブログ、LaravelやSymfonyなどのオープンソースプロジェクトが含まれます。 2)StackOverFlow、Reddit、およびSlackチャネルを通じてサポートを取得できます。 3)開発動向は、RFCに従うことで学ぶことができます。 4)コミュニティへの統合は、積極的な参加、コード共有への貢献、および学習共有への貢献を通じて達成できます。

PHP対Python:違いを理解しますPHP対Python:違いを理解しますApr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

PHP:それは死にかけていますか、それとも単に適応していますか?PHP:それは死にかけていますか、それとも単に適応していますか?Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

PHPの未来:適応と革新PHPの未来:適応と革新Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

強力な PHP 統合開発環境

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン