npmweb/client-validation-generator

此包已被废弃,不再维护。未建议替代包。

用于生成客户端验证的服务器端代码,通常基于来自不同验证框架的服务器端验证规则

2.0.1 2015-08-12 18:43 UTC

This package is not auto-updated.

Last update: 2017-03-16 10:21:56 UTC


README

用于生成客户端验证的服务器端代码,通常基于来自不同验证框架的服务器端验证规则。当前实现从服务器端的Laravel验证规则生成客户端的jQuery Validator规则,但可以扩展为任何服务器端和客户端框架的组合。

安装

  1. npmweb/client-validation-generator 添加到 composer.json 的要求中

     {
         "require": {
             "npmweb/client-validation-generator": "^2.0"
         }
     }
    
  2. 使用 composer update 更新您的包。

  3. 如果您使用Laravel,在您的Laravel服务提供者列表中取消注释任何现有的HtmlServiceProvider,并添加此包

     'providers' => array(
         ...
         // LaravelCollective\Html\HtmlServiceProvider::class,
         NpmWeb\ClientValidationGenerator\Laravel\HtmlServiceProvider::class,
         NpmWeb\ClientValidationGenerator\Laravel\ClientValidationServiceProvider::class,
     ),
    
  4. 如果您使用Laravel,将包的配置文件发布到您的应用

     $ php artisan vendor:publish --provider="NpmWeb\ClientValidationGenerator\Laravel\ClientValidationServiceProvider"
    

使用方法

一旦设置好,如何使用它取决于您使用的模型类型

  • 如果您使用Ardent,当您调用Form::model()或Form::close()(取决于设置)时,传递validate="true",将输出带有您生成的客户端验证规则的<script>标签。
  • 如果您使用其他验证方法,调用Form::clientValidation()并传递验证规则数组,将输出带有您生成的客户端验证规则的<script>标签。

要配置如何工作,编辑配置文件app/config/client-validation.php。它具有以下值

  • 'driver':要使用哪个驱动程序。唯一内置的是'jquery'
  • 'useRequireJs':如果应该通过require.js加载所需的JS库则为true;如果它们将通过您的应用程序代码的某种方式(如普通的<script>标签)加载,则为false
  • 'packageName':使用require.js时,要加载的包的名称
  • 'useDocumentReady':验证设置JS代码是否应该在文档完全加载后运行,使用jQuery的document ready。如果为false,将立即运行。
  • 'codeAtEnd':加载验证的<script>标签应放在<form>标签的开始或结束位置。默认为开始位置。
  • 'functionName':要调用的函数的名称;允许调用扩展jQuery验证器的库
  • 'ruleMappings':指定如何将服务器端验证规则转换为客户端规则(下面有详细说明)

规则映射

在配置文件中,'ruleMappings'是一个关联数组。键是服务器端验证规则名称,值指定如何生成客户端规则。

在最简单的情况下,如果值是字符串,则规则将从服务器端精确地转移到客户端。此字符串可以是键/服务器端相同的规则名称,也可以是不同的名称。

如果值是关联数组,可以设置几个键

  • 'name':客户端规则的名称

  • 'param':定义规则参数的函数。此函数接收服务器端参数,可以进行转换。例如,服务器端规则可能是“same”,参数为“otherField”,而客户端规则需要是“equalTo”,参数为“input[name=otherField]”。这可以通过以下方式实现:

      'param' => function( $param ) {
          return 'input[name=' . $param . ']';
      },
    
  • 'fieldOverride':允许你覆盖规则设置的字段。例如,你可能有一个电子邮件字段和一个电子邮件确认字段。在服务器端,规则可能存在于电子邮件字段上,但在客户端你希望规则存在于email_confirmation字段上。你可以通过以下方式实现:

      'fieldOverride' => function( $param, $field ) {
          return $field.'_confirmation';
      },
    

许可证

此代码在MIT许可证下开源。更多信息,请参阅LICENSE文件。