cdmckay/pajama

Pajama是一个与jQuery Validation插件兼容的PHP模型验证器,它允许JavaScript和PHP之间共享验证规则(JSON格式)。

dev-master 2013-07-17 05:04 UTC

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集成)

首先,获取jQueryjQuery 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假设元素的nameid相同,如下所示

<input type="text" name="foo" id="foo" />