cdmckay / pajama
Pajama是一个与jQuery Validation插件兼容的PHP模型验证器,它允许JavaScript和PHP之间共享验证规则(JSON格式)。
Requires
- php: >=5.3.0
This package is not auto-updated.
Last update: 2024-09-28 15:39:18 UTC
README
Pajama为您的现有jQuery Validation插件表单提供即插即用的服务器端验证。在必要时,它也可以用于独立的服务器端验证。
由于Pajama的目标是与其jQuery Validation插件一起使用,因此API的设计类似于jQuery Validation插件,对已熟悉该插件的使用方法的开发者来说应该是熟悉和直观的。
有关使用Pajama API的更多信息,请参阅文档。
有关验证方法(如required、min、max等)的文档,请参阅jQuery Validation插件文档。
Pajama现在与Composer兼容,可在Packagist上使用。只需将以下行添加到您的composer.json
文件中即可使用它
{ "require": { ... "cdmckay/pajama": "dev-master" } }
入门(jQuery Validation集成)
首先,获取jQuery和jQuery Validation插件。
接下来,创建一个rules.json
文件
{ "rating":{ "required":true, "range":[1, 100] } }
现在,在页面上包含jQuery和jQuery Validation插件
<html> <head> <title>Getting Started</title> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="jquery.validate.js"></script> </head> <body> <form method="post" action="form-handler.php"> <label>Rating: <input type="text" name="rating" /></label> </form> <script type="text/javascript"> $.getJSON("rules.json", function(rules) { $("form").validate({ rules: rules }); }); </script> </body> </html>
最后,创建一个PHP脚本来处理表单提交
require 'ValidatorContext.php'; require 'Validator.php'; \Cdmckay\Pajama\Validator::validate(array( 'model' => $_POST, 'rules' => json_decode('rules.json', true), 'validHandler' => function() { // Store rating in database. }, ));
有关更详细的示例,请参阅examples
文件夹中的jquery-validation-integration
示例。
入门(独立使用)
尽管不是其主要设计目标,但Pajama也可以独立使用。只需在您的PHP脚本中包含由Composer生成的vendor/autoload.php
文件,并传递一个模型和一些规则即可
$rules = array( 'first_name' => 'required', 'last_name' => 'required', 'password_1' => array( 'required' => true, 'minlength' => 5, 'equalTo' => '#password_2', ), 'password_2' => array( 'required' => true, 'minlength' => 5, 'equalTo' => '#password_1', ), ); // Validate with callbacks... $validator = \Cdmckay\Pajama\Validator::validate(array( 'model' => $_POST, 'rules' => $rules, 'validHandler' => function() { // Model validated. }, 'invalidHandler' => function() { // Model failed validation. }, )); // ...or methods. if($validator->model()) { // Model validated. } else { // Model failed validation. }
请参阅examples
文件夹中的standalone
示例。
自定义验证器
与jQuery Validation插件一样,Pajama可以通过自定义验证器进行扩展。要创建自定义验证器,请使用如下所示的addMethod静态方法
\Cdmckay\Pajama\Validator::addMethod('regex', function($context, $value, $param)) { return $context->optional($value) || preg_match('/' . $param . '/', $value); }); \Cdmckay\Pajama\Validator::validate(array( 'model' => $_POST, 'rules' => array( 'md5_hash' => array( 'required' => true, 'regex' => '^[A-Fa-f0-9]+$', ), ), 'validHandler' => function() { // ... }, ));
记住,如果您使用Pajama与jQuery Validation插件一起使用,您还必须编写验证方法的JavaScript版本
$.validator.addMethod("regex", function(value, element, param) { return this.optional(element) || new RegExp(param).test(value); }, "This field does not conform to a pattern.");
限制
由于Pajama无法访问提交表单的DOM上下文,它对CSS选择器的支持有限。
例如,考虑以下标记
<form> <div class="checkbox-group"> <label><input type="checkbox" name="foo[0]" value="bar" />Bar</label> <label><input type="checkbox" name="foo[1]" value="baz" />Baz</label> </div> </form>
jQuery Validation插件的required验证方法可以支持任意的jQuery选择器,如下所示
{ "email": { "required":".checkbox-group :checkbox:first:checked" "email":true } }
然而,Pajama能做的最好的是以下
{ "email": { "required":"[name=foo[0]]:checked" "email":true } }
通常,Pajama只能识别形式为#foo
或[name=foo]
的选择器以及以下伪类
:checked
:unchecked
:filled
:blank
在#foo
的情况下,Pajama假设元素的name
和id
相同,如下所示
<input type="text" name="foo" id="foo" />