验证(Validation)
Validation是Web应用程序中频繁且重复次数最多的任务之一。 用户在表单中输入所需数据并提交。 然后,Web应用程序需要在处理数据之前验证数据。 例如,用户输入员工数据,post_action需要在将其保存到数据库之前进行验证。 FuelPHP为此提供了一个非常简单的类,验证。
在FuelPHP中,验证的概念非常简单,它通过Validation类提供各种方法来正确验证表单。 以下是验证的工作流程,
Step 1 - 使用forge方法创建新的Validation对象。
$val = Validation::forge();
Step 2 - 使用add方法添加需要验证的字段。
$val->add('name', 'Employee name');
Step 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);
Step 4 - 调用run方法验证数据。
// run validation on just post
if ($val->run()) {
// success
} else {
// falier
}
Step 5 - 使用validated和error分别获取有效和无效字段。
$vars = $val->validated();
$vars = $val->error();
规则 (Rules)
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表示字母字符,点表示(。)。 有效字符串只是包含字母字符和(。)的字符串。 其他选项是大写,小写,特殊,数字,空格等。
工作示例 (Working Example)
我们可以更新添加员工功能以包含验证。 只需更新员工控制器的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需要在20到30之间。如果两个规则都有效,那么员工数据将被保存并重定向到员工列表页面。 否则,员工数据将被拒绝并重定向以添加员工页面。