laravel-ardent / laravalid
将Ardent模型验证规则集成到Laravel表单
Requires
- illuminate/routing: 5.1.*
- illuminate/support: 5.1.*
- illuminate/validation: 5.1.*
- laravelbook/ardent: 3.*
- laravelcollective/html: 5.1.*
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许可证授权