FuelPHP - 驗證



驗證是 Web 應用中常見且重複的任務之一。使用者在表單中輸入所需資料並提交。然後,Web 應用需要在處理資料之前驗證資料。例如,使用者輸入員工資料,並且在將其儲存到資料庫之前,post_action 需要進行驗證。FuelPHP 為此目的提供了一個非常簡單的類,即 Validation。

在 FuelPHP 中,驗證的概念非常簡單,它透過 Validation 類提供各種方法來正確驗證表單。以下是驗證的工作流程:

步驟 1 - 使用 forge 方法建立新的 Validation 物件。

$val = Validation::forge();

步驟 2 - 使用 add 方法新增需要驗證的欄位。

$val->add('name', 'Employee name');

步驟 3 - 使用 add_rule 方法為新增的欄位設定驗證規則。

$val->add('name', 'Employee name')->add_rule('required'); 
$val->add('age', 'Employee age')->add_rule('required') 
   ->add_rule('numeric_min', 20) 
   ->add_rule('numeric_max', 30); 

步驟 4 - 呼叫 run 方法驗證資料。

// run validation on just post 
if ($val->run()) { 
   // success 
} else { 
   // falier 
} 

步驟 5 - 使用 validated 和 error 分別獲取有效和無效的欄位。

$vars = $val->validated(); 
$vars = $val->error();

規則

FuelPHP 包含許多驗證規則,並且還提供建立新規則的選項。Validation 類支援的規則如下:

  • required - 必須輸入的值

  • required_with - 設定另一個欄位作為關聯欄位。如果設定了該欄位,則也需要設定關聯欄位

  • match_value - 設定與欄位值匹配的值

  • match_pattern - 設定與欄位值匹配的正則表示式

  • match_field - 設定另一個欄位的值作為與該欄位值匹配的值

  • match_collection - 設定與欄位值匹配的集合

  • min_length - 設定欄位值的最小長度

  • max_length - 設定欄位值的最大長度

  • exact_length - 設定欄位值的精確長度

  • valid_date - 將欄位值設定為有效日期

  • valid_email - 將欄位值設定為有效電子郵件

  • valid_emails - 將欄位值設定為有效電子郵件,用逗號分隔

  • valid_url - 將欄位值設定為有效 URL

  • valid_ip - 將欄位值設定為有效 IP

  • numeric_min - 設定欄位值的最小值

  • numeric_max - 設定欄位值的最大值

  • numeric_between - 設定欄位值的最小值和最大值

  • valid_string - 類似於正則表示式,但更簡單

$val->add('username', 'User name')->add_rule('valid_string', array('alpha, dots');

這裡,alpha 指字母字元,點指 (.)。有效字串僅包含字母字元和 (.) 的字串。其他選項包括大寫、小寫、特殊字元、數字、空格等。

工作示例

我們可以更新新增員工功能以包含驗證。只需按如下方式更新員工控制器的 post_add 方法。

public function post_add() { 
   $val = Validation::forge(); 
   $val->add('name', 'Employee name')->add_rule('required'); 
   $val->add('age', 'Employee age')->add_rule('required')
      ->add_rule('numeric_min', 20) 
      ->add_rule('numeric_max', 30);  
   
   if ($val->run()) { 
      $name = Input::post('name'); 
      $age = Input::post('age');  
      $model = new model_employee(); 
      $model->name = $name; 
      $model->age = $age; 
      $model->save();  
      Response::redirect('employee/list'); 
   } else { 
      Response::redirect('employee/add'); 
   } 
}

在這裡,我們已將 name 和 age 指定為必填欄位。age 需要在 20 到 30 之間。如果兩個規則都有效,則將儲存員工資料並重定向到員工列表頁面。否則,將拒絕員工資料並重定向到新增員工頁面。

廣告

© . All rights reserved.