frangeris / simple-validation
简单、快速、美观的方式为表单或任何你能想到的东西进行验证
Requires
- php: >=5.5.0
This package is not auto-updated.
Last update: 2024-09-24 03:04:35 UTC
README
在PHP中,为表单进行验证的方法有很多种,每个框架(Laravel 4+、Symfony 2+、CodeIgniter、FuelPHP、CakePHP等)都有自己的验证实现,这是正常的,我们期望它们提供这种功能,但是,有时候这些验证很复杂,有时候我们只想验证一个简单的HTML表单并获取可能的失败,就这么简单,你可以在模型中插入你的规则,这是另一种方式,带有超级能力...
安装
最简单的方法是使用 Composer 并将其添加到 composer.json 的需求部分。
{ "require": { "frangeris/simple-validation": "dev-master" } }
它遵循PSR-0规范,因此你也可以使用自己的自定义自动加载器。
用法
通常,每个表单都可以有 规则,什么是规则?规则就是你想验证的内容,就是这样,以下是支持规则的列表
- regex(用于正则表达式目的)
- min(验证是否大于)
- max(验证不超出一个数字)
- required(验证值不是null或空)
- filter(php原生过滤器 :D)
- uploaded(验证文件是否已上传)
- file_max(使用MB进行比较,验证文件的最大大小)
- allow_format(指定允许上传文件的格式)
- not_equal(验证值不等于指定的模式)
让我们开始吧
以下是一个自定义验证结构的示例,在这种情况下,我想验证一个保存18岁以上用户的表单,当然还有有效的姓氏、名字和电子邮件。
<form method="post" action="#"> <input type="text" name="email"> <input type="text" name="f_name"> <input type="text" name="l_name"> <input type="text" name="age"> </form>
规则文件
<?php /* |-------------------------------------------------------------------------- | Secure validations |-------------------------------------------------------------------------- | Here you need to define the rules of each form that you want to validate, | each index represent a form <form_name>, followed by an associative | array with the fields that contains; each field will have [requirements] | and [messages], each [requirements] must have a message to respond (in | case of failure). Putting the prefix on + <requirement> following | cammell case convention for the event | */ return array( 'frm_user_add' => array( 'email' => array( 'requirements' => array('required' => true, 'filter' => FILTER_VALIDATE_EMAIL), 'messages' => array( 'on_required' => 'Insert the email or username for begin', 'on_filter' => 'Invalid email, please try another' ) ), 'f_name' => array( 'requirements' => array('required' => true, 'min' => 3, 'max' => 30, 'regex' => '/^[a-z ]+$/i'), 'messages' => array( 'on_required' => 'Last name is required for create a user', 'on_min' => 'Last name is very short', 'on_max' => 'Last name is too long', 'on_regex' => 'Invalid user name, please try again' ) ), 'l_name' => array( 'requirements' => array('required' => true, 'min' => 3, 'max' => 30 'regex' => '/^[a-z ]+$/i'), 'messages' => array( 'on_required' => 'Last name is required for create a user', 'on_min' => 'Last name is very short', 'on_max' => 'Last name is too long', 'on_regex' => 'Invalid user name, please try again' ) ), 'age' => array( 'requirements' => array('required' => true, 'min' => 18), 'messages' => array( 'on_required' => 'Last name is required for create a user', 'on_min' => 'Last name is very short', 'on_max' => 'Last name is too long' ) ), ), );
如你所见,frm_user_add
是表单的名称,后面跟着一个关联数组,用于字段要求和消息。
email
是表单 frm_build_add
中的一个字段,我们希望这个字段存在,并且必须使用 PHP中的过滤器 进行验证,根据每个错误,消息中的字符串将被返回...太棒了,对吧? :D
f_name
稍微复杂一些,在这种情况下,我们希望该字段是必填的,大于3且小于30,并且需要匹配正则表达式 /^[a-z ]+$/i
...
对于 l_name
与 f_name
具有相同的规则...
最后一个 age
,我只想让它存在,最小值必须是18,就是这样... :)
在PHP端,只需调用验证器类并传递请求中的字段和表单的名称
此示例使用 phalcon框架 进行POST请求
<?php use Simple\Validation\Validator; class ApplicationController extends \Phalcon\Mvc\Controller { public function addAction() { if($this->request->isPost()) { $request = $this->request->getPost(); // Here make the trick for pass the rules $validator = Validator::getInstance(require_once(URL_TO_YOUR_FILE_WITH_RULES)); // Begin the validation (<form_name>, <array_with_values>) if($validator->isValid($request, $request)) { echo 'valid'; // Do your stuff } else echo 'Error: '.$validator->getLastError(true)); // This will give you the last error // If you wanna all the errors with messages just call print_r($validator->getErrors()); } } }
所需函数可以放在另一个地方,只需记住,isValid
方法需要这个数组来验证...
PS:如果你使用的是phalcon,不要这样做,在服务中创建一个DI,并作为di使用,就像这样
// Set up the validator service $di->set('validator', function() use ($config) { $validations = require_once($config->security->validations); return Simple\Validation\Validator::getInstance($validations); });