如何解決PHP數據驗證的復雜性問題?使用Rakit/Validation庫可以!

可以通過一下地址學習composer學習地址

在開發一個用戶注冊系統時,我面臨著一個復雜的數據驗證問題。用戶可能會提交各種格式的數據,包括電子郵件、密碼、文件上傳等,這些數據需要通過一系列規則來驗證,以確保其有效性和安全性。然而,編寫這些驗證邏輯不僅耗時,而且容易出錯。經過一番研究,我發現了 rakit/validation 這個庫,它大大簡化了我的驗證工作。

Rakit/Validation 是一個獨立的 php 驗證庫,靈感來源于 laravel 的驗證系統。它提供了與 Laravel 類似的 API,使得在非 Laravel 項目中使用這些驗證功能變得非常方便。使用 composer 可以輕松安裝這個庫:

composer require rakit/validation

以下是使用 Rakit/Validation 進行數據驗證的一些示例:

基本使用

你可以使用 make 方法創建一個驗證對象,然后調用 validate 方法進行驗證,或者直接使用 validate 方法:

<?php  require('vendor/autoload.php');  use RakitValidationValidator;  $validator = new Validator;  // 使用 `make` 方法 $validation = $validator->make($_POST + $_FILES, [     'name' => 'required',     'email' => 'required|email',     'password' => 'required|min:6',     'confirm_password' => 'required|same:password',     'avatar' => 'required|uploaded_file:0,500K,png,jpeg',     'skills' => 'Array',     'skills.*.id' => 'required|numeric',     'skills.*.percentage' => 'required|numeric' ]);  $validation->validate();  if ($validation->fails()) {     // 處理錯誤     $errors = $validation->errors();     echo "<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">";     print_r($errors->firstOfAll());     echo "

“; exit; } else { // 驗證通過 echo “Success!”; } // 或者直接使用 `validate` 方法 $validation = $validator->validate($_POST + $_FILES, [ ‘name’ => ‘required’, ’email’ => ‘required|email’, ‘password’ => ‘required|min:6’, ‘confirm_password’ => ‘required|same:password’, ‘avatar’ => ‘required|uploaded_file:0,500K,png,jpeg’, ‘skills’ => ‘array’, ‘skills.*.id’ => ‘required|numeric’, ‘skills.*.percentage’ => ‘required|numeric’ ]); if ($validation->fails()) { // 處理錯誤 $errors = $validation->errors(); echo “

";     print_r($errors->firstOfAll());     echo "

“; exit; } else { // 驗證通過 echo “Success!”; }

自定義屬性別名和錯誤消息

Rakit/Validation 允許你自定義屬性別名和錯誤消息。例如,你可以使用 setAlias 或 setAliases 方法來設置屬性別名:

立即學習PHP免費學習筆記(深入)”;

$validator = new Validator;  $validation = $validator->make([     'province_id' => $_POST['province_id'],     'district_id' => $_POST['district_id'] ], [     'province_id' => 'required|numeric',     'district_id' => 'required|numeric' ]);  $validation->setAlias('province_id', 'Province'); $validation->setAlias('district_id', 'District');  // 或者 $validation->setAliases([     'province_id' => 'Province',     'district_id' => 'District' ]);  $validation->validate();

你也可以自定義錯誤消息:

$validator = new Validator([     'required' => ':attribute harus diisi',     'email' => ':email tidak valid', ]);  // 或者使用 `setMessages` 方法 $validator->setMessages([     'required' => ':attribute harus diisi',     'email' => ':email tidak valid', ]);

處理錯誤消息

Rakit/Validation 提供了一些方法來處理和獲取錯誤消息:

$validation = $validator->validate($inputs, $rules);  $errors = $validation->errors();  $messages = $errors->all(); $messages = $errors->firstOfAll(); $message = $errors->first('email'); $messages = $errors->toArray(); $count = $errors->count(); $hasError = $errors->has('email');

獲取驗證數據

你可以使用以下方法獲取驗證后的數據:

$validatedData = $validation->getValidatedData(); $validData = $validation->getValidData(); $invalidData = $validation->getInvalidData();

自定義驗證規則

Rakit/Validation 允許你創建自定義驗證規則。例如,你可以創建一個 UniqueRule 類來檢查數據庫中的唯一性:

class UniqueRule extends Rule {     protected $message = ":attribute :value has been used";      protected $fillableParams = ['table', 'column', 'except'];      protected $pdo;      public function __construct(PDO $pdo)     {         $this->pdo = $pdo;     }      public function check($value): bool     {         $this->requireParameters(['table', 'column']);          $column = $this->parameter('column');         $table = $this->parameter('table');         $except = $this->parameter('except');          if ($except AND $except == $value) {             return true;         }          $stmt = $this->pdo->prepare("select count(*) as count from `{$table}` where `{$column}` = :value");         $stmt->bindParam(':value', $value);         $stmt->execute();         $data = $stmt->fetch(PDO::FETCH_ASSOC);          return intval($data['count']) === 0;     } }  $validator = new Validator; $validator->addValidator('unique', new UniqueRule($pdo));  $validation = $validator->validate($_POST, [     'email' => 'email|unique:users,email,exception@mail.com' ]);

使用 Rakit/Validation 庫,我能夠輕松地在我的項目中實現復雜的數據驗證。它不僅簡化了我的驗證邏輯,還提供了高度的靈活性和可定制性,使得我的用戶注冊系統更加健壯和安全。如果你也在尋找一個高效的 PHP 數據驗證解決方案,那么 Rakit/Validation 絕對值得一試。

? 版權聲明
THE END
喜歡就支持一下吧
點贊11 分享