典型的注册表单:php
<!-- app/views/form.blade.php -->
{{ Form::open(array('url' => 'registration')) }} {{-- Username field. ------------------------}} {{ Form::label('username', 'Username') }} {{ Form::text('username') }} {{-- Email address field. -------------------}} {{ Form::label('email', 'Email address') }} {{ Form::email('email') }} {{-- Password field. ------------------------}} {{ Form::label('password', 'Password') }} {{ Form::password('password') }} {{-- Password confirmation field. -----------}} {{ Form::label('password_confirmation', 'Password confirmation') }} {{ Form::password('password_confirmation') }} {{-- Form submit button. --------------------}} {{ Form::submit('Register') }} {{ Form::close() }}
路由部分:laravel
// app/routes.php Route::get('/', function() { return View::make('form'); }); Route::post('/registration', function() { // 获取全部表单数据. $data = Input::all(); // 建立验证规则 $rules = array( 'username' => array('alpha_num', 'min:3') ); // 开始验证 $validator = Validator::make($data, $rules); if ($validator->passes()) { // 验证成功 return 'Data was saved.'; } // 验证失败 return Redirect::to('/'); });
验证此规则的值必须符合给定的正则表达式。ajax
验证此规则的值必须是 yes、 on 或者是 1。这在验证是否赞成"服务条款"的时候很是有用。正则表达式
验证此规则的值必须在给定的列表中存在。数据库
验证此规则的值必须在给定的列表中不存在。json
验证此规则的值必须所有由字母字符构成。api
验证此规则的值必须是一个数字。数组
验证此规则的值必须所有由字母和数字构成。app
验证此规则的值必须所有由字母、数字、中划线或下划线字符构成。框架
验证此规则的值必须是一个合法的 URL。
注意: 已经证明此规则不严谨,相似 2http://url.com
的 URL 能够经过验证。
验证此规则的值必须是一个合法的 URL,根据 PHP 函数 checkdnsrr。
注意: 因为是基于 checkdnsrr 所以也可用于验证邮箱地址是否存在。
验证此规则的值必须是一个合法的电子邮件地址。
验证此规则的值必须是一个图片 (jpeg, png, bmp 或者 gif)。
验证此规则的值必须是一个整数。
验证此规则的值必须是一个合法的 IP 地址。
验证此规则的值必须在给定日期以前,日期将经过 PHP 函数 strtotime 传递。
验证此规则的值必须在给定日期以后,日期将经过 PHP 函数 strtotime 传递。
验证此规则的值必须在给定的 min 和 max 之间。字符串、数字以及文件都将使用大小规则进行比较。
验证此规则的值必须和 foo_confirmation 的值相同。好比,须要验证此规则的域是 password,那么在输入中必须有一个与之相同的 password_confirmation 域。
验证此规则的值必须与给定域的值相同。
验证此规则的值的大小必须与给定的 value 相同。
对于字符串,value 表明字符的个数,
对于数字,value 表明它的整数值,
对于文件,value 表明文件以KB为单位的大小。
验证此规则的值必须是一个合法的日期,根据 PHP 函数 strtotime。
验证此规则的值必须符合给定的 format 的格式,根据 PHP 函数 date_parse_from_format。
验证此规则的值必须与指定的 field 域的值不一样。
验证此规则的值必须大于最小值 value。字符串、数字以及文件都将使用大小规则进行比较。
验证此规则的值必须小于最大值 value。字符串、数字以及文件都将使用大小规则进行比较。
验证此规则的文件的 MIME 类型必须在给定的列表中。
'photo' => 'mimes:jpeg,bmp,png'
注意: 当使用 regex 模式的时候,有必要使用数组指定规则,而不是管道分隔符,特别是正则表达式中包含一个管道字符的时候。
验证此规则的值必须在输入数据中存在。
当指定的域为某个值的时候,验证此规则的值必须存在。
仅当指定的域存在的时候,验证此规则的值必须存在。
仅当指定的域不存在的时候,验证此规则的值必须存在。
验证此规则的值必须在指定的数据库的表中存在。
'state' => 'exists:states'
指定列名
'state' => 'exists:states,abbreviation'
您也能够指定更多的条件,将以 "where" 的形式添加到查询。
'email' => 'exists:staff,email,account_id,1'
验证此规则的值必须在给定的数据库的表中惟一。若是 column 没有被指定,将使用该域的名字。
'email' => 'unique:users'
指定列名
'email' => 'unique:users,email_address'
强制忽略一个给定的 ID
'email' => 'unique:users,email_address,10'
添加额外的where语句
你还能够指定更多条件,这些条件将被添加到查询的"where"语句中:
'email' => 'unique:users,email_address,NULL,id,account_id,1
在上面的规则中,只有account_id 为 1 的行才会被包含到unique检查中。
Route::post('/registration', function() { // 获取所有提交数据 $data = Input::all(); // 构造规则数组 $rules = array( 'username' => 'alpha_num' ); // 开始验证 $validator = Validator::make($data, $rules); if ($validator->passes()) { // 验证经过 return 'Data was saved.'; } // 验证失败 // 获取错误消息 $errors = $validator->messages(); // 构造 JSON 响应 return Response::json($errors); });
return Redirect::to('/')->withErrors($validator);
注意: $errors
是系统预约义变量,任何模板中都可使用。
{{ $errors->first('username') }}
@foreach($errors->get('username') as $message) <li>{{ $message }}</li> @endforeach
@foreach($errors->all() as $message) <li>{{ $message }}</li> @endforeach
@if($errors->has('email')) <p>Yey, an error!</p> @endif
{{ $errors->first('username', '<span class="error">:message</span>') }}
注意: 默认状况下,消息将使用与 Bootstrap 兼容的语法进行格式化。
@foreach($errors->all('<li>:message</li>') as $message) {{ $message }} @endforeach
注意: 匿名函数 和 指向普通类方法 的 规则扩展 并不推荐,所以直接介绍如何直接扩展官方的验证器。
编写扩展验证器类:
class ExValidator extends Illuminate\Validation\Validator { // 规则 public function validateFoo($attribute, $value, $parameters) { return $value == 'foo'; } // 消息 protected function replaceFoo($message, $attribute, $rule, $parameters) { return str_replace(':foo', $parameters[0], $message); } }
注册定制的验证器扩展:
Validator::resolver(function($translator, $data, $rules, $messages) { return new ExValidator($translator, $data, $rules, $messages); });
详细的编写方法请参照官方类 /vendor/laravel/framework/src/Illuminate/Validation/Validator.php
。
针对某一个验证规则:
$messages = array( 'required' => 'The :attribute field is required.', ); $validator = Validator::make($input, $rules, $messages);
针对指定域的某一规则:
$messages = array( 'email.required' => 'We need to know your e-mail address!', );
在语言文件中定义 /app/lang/zh-CN/validation.php
:
原文:http://my.oschina.net/5say/blog/186568我我的更喜欢使用Request方式进行验证;使用laravel的artisan命令 php artisan make:request XxxxxRequest.php中进行验证使用request验证的好处是能够 表单使用ajax提交的时候 框架会自动返回json错误消息,其余提交方式 框架仍然使用$message返回'custom' => array( 'email' => array( 'required' => '请填写您的 email 地址。', ), ),