filpgame/laravalid

该包通过将 Laravel 定义的验证规则转换为 html/js 插件(如 jQuery 验证)来实现客户端验证。它还允许使用 Laravel 验证消息,以便在客户端和服务器端显示相同的消息。

v1.1.2 2015-12-26 11:15 UTC

This package is not auto-updated.

Last update: 2024-09-18 19:04:01 UTC


README

#Laravalid

面向客户端的 Laravel 验证

该包通过将 Laravel 定义的验证规则转换为 html/js 插件(如 jQuery 验证)来实现客户端验证。它还允许使用 Laravel 验证消息,以便在客户端和服务器端显示相同的消息。

目录

功能概述

  • 多插件支持 //目前只有一个 :)
    • Jquery 验证
  • 可扩展
  • 基于 Laravel 表单构建器
  • 可以从控制器设置验证规则
  • 区分数字输入和字符串输入
  • 用户友好的输入名称
  • 远程规则,如唯一和存在

安装

在 composer.json 中添加 bllim/laravalid 并运行 composer update

{
    "require": {
        "laravel/framework": "5.1.*", //or "5.0.*"
        ...
        "bllim/laravalid": "*"
    }
    ...
}

注意:对于 Laravel 4,使用 laravel4 分支,如 "bllim/laravalid": "dev-laravel4"

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

    'providers' => array(
        ...
            'Bllim\Laravalid\LaravalidServiceProvider',
    ),
    'aliases' => array(
        ...
            'HTML'      => 'Collective\Html\HtmlFacade::class', // if not exists add for html too
            'Form'      => 'Bllim\Laravalid\Facade',
    ),

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

$ php artisan vendor:publish

配置

发布配置文件后,您可以在 config/laravalid 文件夹中找到它。配置参数如下

使用

该包使用 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($rules, $formName)。如果您不提供表单名称,则为此设置第一个 Form::open 的规则

    // in controller or route
    $rules = ['name' => 'required|max:100', 'email' => 'required|email', 'birthdate' => 'date'];
    Form::setValidation($rules, 'firstForm'); // you can also use without giving form name Form::setValidation($rules) because there is just one.
    
    // in view
    Form::open(array('url' => 'foo/bar', 'method' => 'put', 'name' => 'firstForm'), $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。

插件

Jquery 验证 当使用 Jquery 验证作为 html/js 验证插件时,您还应该在视图中包含 jquery.validate.laravalid.js。在资源发布后,它将被复制到您的公共文件夹中。客户端最后要做的事情是初始化 jQuery 验证插件,如下所示

<script type="text/javascript">
$('form').validate({onkeyup: false}); //while using remote validation, remember to set onkeyup false
</script>

示例

控制器/路由端

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

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

    public function postCreate()
    {
        $inputs = Input::only($this->createColumns);
        $rules = $this->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>Laravalid</title>
    </head>
    <body>
    
        {{ Form::open('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.laravalid.js') }}"></script>
        <script type="text/javascript">
        $('form').validate({onkeyup: false});
        </script>
    </body>
</html>

扩展

有两种方法可以扩展包以使用您自己的规则。首先,您可以像下面那样动态扩展当前转换器插件

Form::converter()->rule()->extend('someotherrule', function($parsedRule, $attribute, $type){
    // some code
    return ['data-rule-someotherrule' => 'blablabla'];
});
Form::converter()->message()->extend('someotherrule', function($parsedRule, $attribute, $type){
    // some code
    return ['data-message-someotherrule' => 'Some other message'];
});
Form::converter()->route()->extend('someotherrule', function($name, $parameters){
    // some code
    return ['valid' => false, 'messages' => 'Seriously dude, what kind of input is this?'];
});

其次,您可以在 Bllim\Laravalid\Converter\ 命名空间中创建自己的转换器(它扩展了 baseconverter 或任何当前的插件转换器),并在配置文件中更改插件配置以使用您自己的插件名称。

注意:如果您为某些现有的 html/js 插件创建转换器,请将其创建在 converters 文件夹中并提交拉取请求。

插件和支持的规则

Jquery 验证 要使用 Jquery 验证,请将配置文件中的插件更改为 JqueryValidation,并在视图中导入 jQuery、jquery-validation 和 jquery.validation.laravel.js

注意: 添加一些规则很容易。请检查相关转换器的 Rule 类。

贡献

您可以分叉并贡献对该包的开发。所有拉取请求都受欢迎。

转换逻辑 该包通过使用转换器(在 src/converters 中)进行规则转换。它使用所选插件的 Converter 类,该类扩展了 BaseConverter/Converter 类。您可以查看现有方法和插件来了解其工作原理。解释将很快准备好。

已知问题

  • 目前某些规则不受支持

待办事项

  • 测试脚本
  • 支持不支持规则
  • 改进文档
  • 注释代码

更新日志

v1.0

  • 初始提交

许可证

根据 MIT 许可证许可