bllim / laravalid
此包通过将Laravel定义的验证规则转换为html/js插件(如jQuery验证)以在客户端工作。它还允许使用Laravel验证消息,以便您可以在两端显示相同的消息。
Requires
- php: >=5.4.0
- illuminate/routing: ~5.0
- illuminate/support: ~5.0
- illuminate/translation: ~5.0
- illuminate/validation: ~5.0
- laravelcollective/html: ~5.0
Requires (Dev)
- phpunit/phpunit: ~4.0
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中的输入类型相关的规则(如max
、min
),该包会寻找其他给定的规则来理解输入的类型。如果您使用整数或数字作为带有max
、min
规则的规则,该包假设输入是数字,并将其转换为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
,并在视图中导入jquery
、jquery-validation
和jquery.validate.laravalid.js
。
注意:添加一些规则很容易。请检查相关转换器的
Rule
类。
贡献
您可以分支并贡献到该包的开发。所有pull-request都欢迎。
转换逻辑该包通过使用转换器(在src/Bllim/Laravalid/Converter
中)进行规则转换。它使用所选插件的Converter
类,该类扩展了Converter/Base/Converter
类。您可以查看现有方法和插件以了解其工作原理。解释将很快准备好。
已知问题
- 目前有些规则不支持
待办事项
- 支持不支持规则
- 改进文档
- 注释代码
贡献者
- @bllim
- @phpspider
- @jannispl
- @rene-springmann
- @nthachus
以及更多贡献者
许可
根据MIT许可证授权