laravel-ardent/laravalid

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

将Ardent模型验证规则集成到Laravel表单

v2.3.3 2016-01-20 17:25 UTC

README

#Laravalid + Ardent

Laravel 客户端验证,使用Ardent自验证智能模型

此包使得在客户端通过将验证规则转换为HTML + JS插件(如jQuery Validation)来使用在Laravel中定义的验证规则。它还允许您使用Laravel验证消息,以便在客户端和服务器端显示相同的消息。

目录

功能概述

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

安装

在composer.json中要求bllim/laravel-validation-for-client-side并运行composer update

{
    "require": {
        "laravel/framework": "5.1.*",
        ...
        "laravel-ardent/laravalid": "2.*"
    }
    ...
}

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

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

    'providers' => [
        ...
        'LaravelArdent\Laravalid\LaravalidServiceProvider',
    ],
    
    'aliases' => [
        ...
        'HTML' => 'Illuminate\Support\Facades\HTML',
        'Form' => 'LaravelArdent\Laravalid\Facade',
    ],

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

$ ./artisan vendor:publish

配置

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

参数 描述
plugin 选择您想使用的插件 插件和支持的规则
useLaravelMessages 如果是true,则客户端使用Laravel验证消息,否则使用所选插件的默认消息 boolean。见验证消息
route 远程验证的路由名称 任何路由名称(默认:laravalid)。该路由将接收一个名为rule的参数
action 自定义操作以运行远程验证程序 操作字符串,例如SiteController@getValidation(注意路由冲突,这将添加到您的routes.php文件之后处理)。如果您想缓存路由(./artisan route:cache),则需要此操作。如果包含此操作,则默认行为可以返回app('laravalid')->remoteValidation($rule)

验证消息

如果您将 useLaravelMessages 设置为 true,您就可以使用(Laravel 的本地化包)l10n 来生成验证消息。要这样做,请按照文档进行操作,以配置包(通过设置您的默认/回退/当前区域设置)。然后,根据文档创建每个区域的文件夹,并为每个区域创建一个 validation.php 文件。在这些文件中,您将为每个规则名称设置消息,如下所示

<?php return [
    'required' => 'This is a required field',
    'min'      => [
        'string' => 'This is too short',
        'number' => 'This is too low',
    ]
    //...
];

用法

该包使用 Laravel 表单生成器来使验证规则对两边都生效。当使用 Form::open 打开表单时,您可以传递 $rules 作为第二个参数

    $rules = ['name' => 'required|max:100', 'email' => 'required|email', 'birthdate' => 'date'];
    Form::open(['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'];

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

与 Ardent 一起使用

这个包扩展的魔力来自于与 Ardent 模型的集成。这里有两种方法可以与 Ardent 一起使用(第二种是首选方法)

    // you can bring in the rules from the model...
    Form::open(['url' => 'foo/bar', 'method' => 'put'], App\Models\User::$rules);
    // ...or use the model form to make things even cleaner: the rules will be imported from it!
    Form::model($user, ['url' => 'foo/bar', 'method' => 'put']);

验证消息

转换器默认使用 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 文件夹中,并提交一个 pull-request。

插件和支持的规则

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

规则 jQuery 验证
Accepted -
Active URL -
After (Date) -
Alpha +
Alpha Dash -
Alpha Numeric -
Array -
Before (Date) -
Between +
Boolean -
Confirmed -
Date +
Date Format -
Different -
Digits -
数字之间 -
电子邮件 +
存在于(数据库) +
图片(文件) -
-
整数 -
IP地址 +
最大 +
MIME类型 -
最小 +
不在 -
数字 +
正则表达式 +
必填 +
如果需要 -
需要与 -
全部需要 -
不需要 -
全部不需要 -
相同 +
大小 -
字符串 -
时区 -
唯一(数据库) +
URL +

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

贡献

您可以通过fork来为该包的开发做出贡献。所有pull请求都欢迎。

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

已知问题

  • 目前某些规则不受支持

待办事项

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

更新日志

查看项目的发布

许可证

根据MIT许可证授权