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 之间。如果两个规则都有效,则将保存员工数据并重定向到员工列表页面。否则,将拒绝员工数据并重定向到添加员工页面。

广告