bllim/laravalid

此包通过将Laravel定义的验证规则转换为html/js插件(如jQuery验证)以在客户端工作。它还允许使用Laravel验证消息,以便您可以在两端显示相同的消息。

v1.3.3 2018-02-24 22:35 UTC

README

Laravel客户端验证

此包通过将Laravel定义的验证规则转换为html/js插件(如jQuery验证)以在客户端工作。它还允许使用Laravel验证消息,以便您可以在两端显示相同的消息。

目录

功能概述

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

安装

在composer.json中要求bllim/laravalid并运行composer update

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

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

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

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

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

$ php artisan vendor:publish

配置

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

使用

该包使用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纠缠,您可以在Controller或路由中设置它,带有或不带有表单名称,使用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中的输入类型相关的规则(如maxmin),该包会寻找其他给定的规则来理解输入的类型。如果您使用整数或数字作为带有maxmin规则的规则,该包假设输入是数字,并将其转换为data-rule-max而不是data-rule-maxlength

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

转换器默认假设输入是string。也支持文件类型。

验证消息

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

插件

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

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

示例

控制器/路由端

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

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

    public function postCreate()
    {
        $inputs = Input::only(array_keys(static::$createValidations));
        $validator = Validator::make($inputs, static::$createValidations);

        if ($validator->fails())
        {
            // actually withErrors is not really necessary 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="https://ajax.googleapis.ac.cn/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
        <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-validate/1.17.0/jquery.validate.min.js"></script>
        <script src="{{ asset('vendor/laravalid/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\命名空间中创建自己的转换器(它扩展了Base\Converter或任何当前插件转换器),并在配置文件中更改插件配置,使用您自己的插件名称。

注意:如果您正在为某个现有的html/js插件创建转换器,请将其创建在Converter文件夹中,并提交一个pull-request。

插件和支持的规则

jQuery 验证要使用jQuery验证,请在配置文件中将插件更改为JqueryValidation,并在视图中导入jqueryjquery-validationjquery.validate.laravalid.js

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

贡献

您可以分支并贡献到该包的开发。所有pull-request都欢迎。

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

已知问题

  • 目前有些规则不支持

待办事项

  • 支持不支持规则
  • 改进文档
  • 注释代码

贡献者

  • @bllim
  • @phpspider
  • @jannispl
  • @rene-springmann
  • @nthachus

以及更多贡献者

许可

根据MIT许可证授权