bllim/laravel-to-jquery-validation

此包通过将Laravel中定义的验证规则转换为jQuery验证规则,使其在客户端工作。它使用jQuery Validation插件。它还允许使用Laravel验证消息,因此您可以显示相同的信息。

1.0.1 2015-02-27 08:32 UTC

This package is not auto-updated.

Last update: 2024-09-24 03:59:38 UTC


README

此包不再维护。

查看 Laravalid 以获取相同功能和更多功能

  • Laravel 4和Laravel 5支持
  • 多插件支持
  • 可扩展
  • 远程规则支持等。

Laravel到Jquery验证

关于

此包通过将Laravel中定义的验证规则转换为jQuery验证规则,使其在客户端工作。它使用Jquery Validation插件。它还允许使用Laravel验证消息,因此您可以显示相同的信息。

功能概述

  • 将验证规则从Laravel转换为jQuery验证器
  • 与Laravel表单生成器一起工作
  • 可以从控制器设置验证规则
  • 可以区分数字输入和字符串输入
  • 支持用户友好的输入名称

安装

在composer.json中包含bllim/laravel-to-jquery-validation并运行composer update

{
    "require": {
        "laravel/framework": "4.0.*",
        ...
        "bllim/laravel-to-jquery-validation": "*"
    }
    ...
}

Composer将下载包。下载完成后,打开app/config/app.php并添加以下服务提供者和别名

    'providers' => array(
        ...
        'Bllim\LaravelToJqueryValidation\LaravelToJqueryValidationServiceProvider',
    ),

您还需要运行以下Artisan命令来发布配置文件和资源。

$ php artisan config:publish bllim/laravel-to-jquery-validation
$ php artisan asset:publish bllim/laravel-to-jquery-validation

用法

由于此包使用Jquery Validation插件,因此您应该在视图中包含它(当然也包括jQuery)。对于jQuery验证器中不受支持的规则,您还应在视图中包含jquery.validate.laravel.js。发布资源后,它们将被复制到您的public文件夹。客户端最后一件事是初始化jQuery验证器插件,如下所示

<script type="text/javascript">
$('form').validate();
</script>

该包使用Laravel表单生成器使验证规则在两侧都生效。因此,您应该使用表单生成器。当通过Form::open打开表单时,您可以提供$rules作为第二个参数

    $rules = ['name' => 'required|max:100', 'email' => 'required|email', 'birthdate' => 'date'];
    Form::open(array('url' => 'foo/bar', 'method' => 'put'), $rules);
    Form::text('name');
    Form::text('email');
    Form::text('birthdate');
    Form::close(); // don't forget to close form, it reset validation rules

此外,如果您不想在视图文件中与$rules纠缠,您可以使用Form::setValidation在控制器或路由中设置它。这为第一个Form::open设置规则

    // in controller or route
    $rules = ['name' => 'required|max:100', 'email' => 'required|email', 'birthdate' => 'date'];
    Form::setValidation($rules);
    
    // in view
    Form::open(array('url' => 'foo/bar', 'method' => 'put'), $rules);
    // some form inputs
    Form::close();

对于与Laravel中的输入类型相关的规则(例如max、min),该包查找其他给定的规则以了解输入的类型。如果您使用max、min规则给出整数或数字作为规则,则该包假定输入是数字并将转换为data-rule-max而不是data-rule-maxlength。

    $rules = ['age' => 'numeric|max'];

默认情况下,转换器假定输入是字符串。文件类型目前不支持。

验证消息

默认情况下,转换器使用Laravel的验证消息(app/lang/en/validation.php)在客户端。如果您想使用jQuery验证消息,您可以在包的配置文件中将useLaravelMessages设置为false,该文件已复制到您的配置目录。默认情况下,它为true。

示例

控制器/路由端

class UserController extends Controller {
    
    public static $createValidation = ['name' => 'required|max:255', 'username' => 'required|regex:/^[a-z\-]*$/|max:20', 'email' => 'required|email', 'age' => 'numeric'];
    public static $createColumns = ['name', 'username', 'email', 'age'];

    public function getCreate()
    {
        Form::setValidation(static::$createValidation);
        return View::make('user.create');
    }

    public function postCreate()
    {
        $inputs = Input::only(static::$createColumns);
        $rules = static::$createValidation;

        $validator = Validator::make($inputs, $rules);

        if($validator->fails())
        {
            // actually withErrors is not really neccessary because we already show errors at client side for normal users
            return Redirect::back()->withErrors($validator);
        }

        // try to create user

        return Redirect::back()->with('success', 'User is created successfully');
    }
}

视图端

<!DOCTYPE html>
<html lang="en">
    <head>
      <meta charset="utf-8">
      <title>Laravel to Jquery Validation</title>
    </head>
    <body>
    
        {{ Form::open(array('url'=>'create', 'method'=>'post')) }}
        {{ Form::text('name') }}
        {{ Form::text('username') }}
        {{ Form::email('email') }}
        {{ Form::number('age') }}
        {{ Form::close() }}

        <script src="{{ asset('js/jquery-1.10.2.min.js') }}"></script>
        <script src="{{ asset('js/jquery.validate.min.js') }}"></script>
        <script src="{{ asset('js/jquery.validate.laravel.js') }}"></script>
        <script type="text/javascript">
        $('form').validate_popover({

            highlight: function(element) {
              jQuery(element).closest('.form-group').removeClass('has-success').addClass('has-error');
            },
            success: function(element) {
              jQuery(element).closest('.form-group').removeClass('has-error');
            },
            events   : 'submit',
            selector : 'input[type!=submit], select, textarea',
            callback : function( elem, valid ) {
                if ( ! valid ) {
                    $( elem ).addClass('error');
                }
            }
          });
        </script>
    </body>
</html>

支持的验证规则

  • 必需
  • 电子邮件
  • URL
  • 整数
  • 数字
  • IP
  • 相同
  • 正则表达式
  • 字母
  • 字母数字
  • 图片
  • 日期
  • 最小值
  • 最大值
  • 介于

贡献

您可以分叉并为此包的开发做出贡献。所有pull请求都受欢迎。

设置新的转换规则

该包通过定义的方法进行规则转换,方法名称类似于 _convertRuleRuleName,并通过定义的方法进行消息转换,方法名称类似于 _convertMessageRuleName。您可以添加新的方法来转换当前的规则和消息。如果无需添加即可正常工作,则无需添加转换消息的方法。默认情况下,存在 getErrorMessage 方法来处理错误消息(仅包含 :attribute 参数)。

规则和消息转换方法都接受3个参数,分别是

$parsedRule: ['name' => '', 'parameters' => []] formatted array which gives name and parameters of the rule,
$attribute: attribute name of the input, 
$type: type of the current input. by default it is string, if rules of an input contains numeric or integer, it is set numeric.

规则和消息转换方法返回当前输入的属性。例如,如果您正在转换必填规则,您应该通过返回 ['data-rule-required'=>'true'] 来添加输入标签 data-rule-requried="true"

您可以查看现有方法来了解其工作原理。

已知问题

  • 目前不支持一些规则

待办事项

  • 测试脚本
  • 支持不支持的规则

许可证

在 MIT 许可证下授权