nebumix / rt-validation-bundle
Symfony2 实时后端验证
Requires
- bmatzner/jquery-bundle: ~1.9
- friendsofsymfony/jsrouting-bundle: @stable
- symfony/framework-bundle: >=2.4
This package is not auto-updated.
Last update: 2024-09-24 02:09:08 UTC
README
Symfony2 实时后端验证
安装
将包添加到 composer.json 文件
// composer.json { "require": { // ... "nebumix/rt-validation-bundle": "dev-master" } }
将包添加到您的应用程序内核
// app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Bmatzner\JQueryBundle\BmatznerJQueryBundle(), new FOS\JsRoutingBundle\FOSJsRoutingBundle(), new Nebumix\rtValidationBundle\NebumixrtValidationBundle(), // ... ); }
使用 Composer 下载包
$ php composer.phar update nebumix/rt-validation-bundle
在 app/config/routing.yml
中注册路由定义
# app/config/routing.yml fos_js_routing: resource: "@FOSJsRoutingBundle/Resources/config/routing/routing.xml" Nebumix_rtV_routing: resource: "@NebumixrtValidationBundle/Resources/config/routing.yml"
安装资源
假设您的服务器公共目录名为 "web",安装公共供应商资源
$ php app/console assets:install web
可选地,使用 --symlink 属性创建链接而不是资源的副本
$ php app/console assets:install --symlink web
创建新文件 app/config/securityRT.yml
# app/config/securityRT.yml parameters: nebumix_rtvalidation.check.class: Nebumix\rtValidationBundle\Controller\CheckController
在 app/config/config.yml
中导入新文件
# app/config/config.yml imports: // ... - { resource: securityRT.yml }
安装 NeburtValidation,您还自动安装了 bmatzner/jquery-bundle
和 friendsofsymfony/jsrouting-bundle
我们需要配置 friendsofsymfony/jsrouting-bundle,您可以在官方页面查看官方文档。
我建议在 app/config/config.yml
中添加以下行
# app/config/config.yml fos_js_routing: routes_to_expose: [ nebumixrt_validation_check ]
您需要的路由名是 nebumixrt_validation_check
用法
添加 jQuery
在您的布局中添加此行
<script type="text/javascript" src="{{ asset('bundles/bmatznerjquery/js/jquery.min.js') }}"></script>
添加 FOSJsRoutingBundle
在您的布局中添加这两行
<script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
<script src="{{ path('fos_js_routing_js', {"callback": "fos.Router.setData"}) }}"></script>
添加 rtValidation
在您的布局中添加此行
<script type="text/javascript" src="{{ asset('bundles/nebumixrtvalidation/js/nebumix_r_t_validation.js') }}"></script>
编写 JavaScript 函数
此示例假设在页面中有一个名为 nameField
、nameField1
... 的表单字段。在示例中将有更详细的解释。
要实时验证表单字段,您需要调用一个函数来检查您的字段。我使用了 .focusout 函数。
要验证文本字段,您需要在您的布局中添加以下内容
$(function() { $('#nameForm_nameField').focusout(function() { check_field('nameValidation', 'nameForm_nameField'); }); $('#nameForm_nameField1').focusout(function() { check_field('nameValidation', 'nameForm_nameField1'); }); //... $('#nameForm_nameFieldN').focusout(function() { check_field('nameValidation', 'nameForm_nameFieldN'); }); //if you have a radio or checkbox $('#nameForm_nameFieldN').onchange(function() { check_field_check('nameValidation', 'nameFieldToCheck'); }); });
您需要将 nameField
替换为您想要验证的字段名称,将 nameForm
替换为表单名称(通常使用 nameForm_nameField 创建 id 字段)。您需要将 nameValidation
替换为一个名称,它对于每个表单都必须不同。nameValidation
不必是实际的表单名称,它只需要在验证文件中区分表单字段。
在 securityRT.yml
中编写验证规则
parameters: nebumix_rtvalidation.check.class: Nebumix\rtValidationBundle\Controller\CheckController nameValidation: nameForm_nameField: NotBlank: message: Field is required. Regex: pattern: "/^\d+$/" message: insert an integer nameForm_nameField1: NotBlank: Length: min: 3 nameFieldToCheck: NotBlank:
您必须使用在 JavaScript 函数中使用的名称,后跟 nameForm_nameField
和验证规则,如示例所示。
打印错误
要打印错误,您可以在布局中添加以下内容
<div id="nameForm_nameField_error"></div> <div id="nameForm_nameField1_error"></div> / ... <div id="nameForm_nameFieldN_error"></div>
div id 必须是 nameForm_nameField
后跟 _error
。您必须为每个字段写一个。
提交表单
现在您可以在实时中验证表单,但如果您希望在验证返回错误时停止表单,请在布局中添加 JavaScript 函数
$( document ).ready(function() { $( "#sendForm" ).click(function() { //list functions, each per field var c_nameField = check_field('nameValidation', 'nameForm_nameField'); var c_nameField1 = check_field('nameValidation', 'nameForm_nameField1'); //.. var c_nameFieldN = check_field('nameValidation', 'nameForm_nameFieldN'); //if you have a radio or checkbox var c_nameFieldToCheck = check_field_check('nameValidation', 'nameFieldToCheck'); if( c_nameField == 1 && c_nameField1 == 1 ) { var form_data = $('#myForm').serialize(); $.ajax({ url: Routing.generate('_your_route_to_save_form'), type: "POST", data: form_data, dataType: "html", async : false, success: function(msg) { //if the function have no error return 1 if(msg == 1){ alert('Saved'); }else{ check_field('nameValidation', 'nameForm_nameField'); check_field('nameValidation', 'nameForm_nameField1'); //... check_field('nameValidation', 'nameForm_nameFieldN'); } }, error: function(){ alert("ERROR!"); } }); } }); });
这只是一个示例,您可以编写自己的函数。
支持的约束
基本约束
字符串约束
数字约束
比较约束
EqualTo
NotEqualTo
IdenticalTo
NotIdenticalTo
LessThan
LessThanOrEqual
GreaterThan
GreaterThanOrEqual
日期约束
财务及其他数字约束
示例
...