filpgame / laravalid
该包通过将 Laravel 定义的验证规则转换为 html/js 插件(如 jQuery 验证)来实现客户端验证。它还允许使用 Laravel 验证消息,以便在客户端和服务器端显示相同的消息。
Requires
- php: >=5.3.0
- illuminate/routing: >=4.0
- illuminate/support: >=4.2
- illuminate/validation: >=4.0
- laravelcollective/html: 5.*
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 许可证许可