Laravel4中使用的验证

29 篇文章 1 订阅
22 篇文章 0 订阅

Laravel4 中Validator的使用

Laravel自带一个简单、方便的Validation类用于验证数据以及获取错误消息

基本验证例子

$validator = Validator::make(
    array('name'=>'Dayle'),
    array('name'=>'required|min:5')
);

传递给make函数的第一个参数是待验证的数据,第二个参数是对该数据需要应用的验证规则。

多个验证规则可以通过“|”字符进行分隔,或者作为数组的一个单独的元素。


通过数组指定验证规则
$validator = Validator::make(
    array('name'=>'Dayle'),
    array('name'=>array('required','min:5'))
);

验证多个字段
$validator = Validator::make(
    array(
        'name'        =>'Dayle',
        'password' =>'lamepassword',
        'email'       => 'email@example.com'
    ),
    array(
        'name'=>'required',
        'password'=>'required|min:8',
        'email'=>'required|email|unique:users'
        )
);
````
一旦一个Validator实例被创建,可以使用fails(或者passes)函数执行这个验证.





<div class="se-preview-section-delimiter"></div>

```php
if ($validator
if ($validator->fails()) {
    //这里执行验证失败的代码
}

如果验证失败,你可以从验证器中获取错误消息。

$messages = $validator->messages();

你也可以 使用failed函数得到不带错误消息的没有通过的验证规则的数组。

$failed = $validator->failed();

文件验证

Validator类提供了一些验证规则用于验证文件,比如size、mimes等,在验证文件的时候,你可以和其他数据一起传递给验证器。

使用错误消息

在一个Validator实例上调用message函数之后,将会得到一个MessageBag实例,该实例拥有很多方便使用错误消息的函数。


获取一个字段的第一个错误消息
echo $message->first('email');
获取一个字段的全部错误消息
foreach($message->get('email') as $message){
    //
}
获取全部字段的全部错误消息
foreach($messages->all() as $message) {

}
检查一个字段是否存在消息
if($message->has('email) {

}
以某种格式获取一条错误消息
echo $message->first('email','<p>:message</p>');

错误消息&视图

一旦你执行了验证,你需要一种简单的方法想视图反馈错误消息。这在Laravel中能够方便的处理。

Route::get('registre',function()
    {
        return View::make('user.registre');
    }
);

Route::post('register',fucntion(){
    $rules = array();
    $validator = Validator::make(Input::all(),$rules);
    if ($validator->fails()) {
        return Redirect::to('register')->withErrors($validator);
    }
});

注意当验证失败,我们使用withErrors函数把validator实例传递给Redirect。这个函数将刷新Session中保存的错误消息。使得他们在下次请求的时候可用。

然而,请注意我们在GET路由中并没有明确的绑定错误消息到视图。这是因为Laravel总会检查Session中的错误,并且如果他们是可用的将自动绑定到视图。所以,需要特别注意的是,对于每个请求,一个 errors便 errors变量总是被定义并可以安全使用的。$errors变量僵尸一个MessageBag类的实例。

所以,在跳转之后,你可以在视图中使用自动绑定的$errors变量:

<?php echo $errors->first('email);?>

有条件的添加规则

有时候你可能希望给定的字段仅当另外一个字段的值大于100的时候必须存在。或者你可能需要两个字段均含有一个给定的值,仅当另一个字段存在的时候,廷加这些验证规则并没有那么麻烦。首先,创建一个使用你永远不会改变的static rules 的 Validator实例:

$v = Validator::make($data,array(
    'email'=>'required|email',
    'games'=>'required|numeric'
));

假设我们的WEB应用程序是服务于游戏收藏爱好者们,如果一个游戏收藏爱好者注册了我们的应用程序,并且他拥有100多款游戏,我们想让他们说明为什么他们会拥有如此多的游戏,例如,或许他们要开一个游戏转售店,或者也许他们只是喜欢收集。为了有条件的添加这个需求,我们可以使用Validator实例的sometimes函数

$v->sometimes('reason','required|max:500',function($input){
    return $input->games>100;
})

sometimes函数的第一个参数是我们有条件的验证的字段名,第二个参数是我们要添加的规则,如果Closure作为第三个参数并且返回了true,规则将被添加。这种方法可以很容易构建复杂的条件验证。你甚至可以一次性,为多个字段添加条件验证:

$v->sometimes(array('reason','cost'),'required',function($input){
    return $input->games >= 100;
})

这个有条件的验证规则在于,先将必须验证的规则写在前面,然后将其他条件规则,利用sometimes添加上

自定义错误消息

如果有需要,你可以使用自定的错误消息来代替默认的错误消息。这里有好几种自定义错误消息的方法。


传递自定义消息到验证器
$message = array(
    'required'=>'The:attribut field is required.',
);

$validator = Validator::make($input,$rules,$messages);

注意::attribute占位符将被实际要验证的字段名替换。


对一个指定的字段指定自定义的错误消息
$message = array(
    'email.required'=>'请输入您的邮箱',
);

在一些情况下你可能希望一个语言文件指定你的错误消息,而不是直接传递给Validator。为了实现这个目的,请在app/lang/xx/validation.php文件中添加你的自定义消息到custom数组

在语言文件中指定错误消息
'custom'=>array(
    'email'=>array(
        'required'=>'请输入您的邮箱地址'
    ),
);

自定义验证规则

Laravel提供了一系列有用的验证规则;但是,你可以希望添加自己的验证规则。其中一个方法就是使用Validator::extend函数注册自定义的验证规则;


注册一个自定义的验证规则
Validator::extend('foo',function($attribute,$value,$parameters){
    return $value=='foo';
});

自定义的验证器接受三个参数:待验证属性的名字,待验证属性的值以及传递给这个规则的参数。
你也可以床底一个类的函数到extend函数,而不是使用闭包:

Validator::extend('foo','FooValidator@validate');

注意你需要为你自定的规则定义错误消息。你既可以使用一个行内的自定义消息数组,也可以在验证语言文件中进行添加。

你也可以扩展Validator类本身,而不是使用闭包回调扩展验证器,为了实现这个目的,添加一个继承自Illuminate\Validation\Validator的验证器类。你可以在类中添加validate开头的验证函数

扩展验证器类
class CustomValidator extends Illuminate\Validation\Validator {
    public function validateFoo($attribute,$value,$parameters){
        return $value == 'foo';
    }
}

下面你需要注册自定的验证器扩展:


你需要注册自定义的验证器扩展
Validator::resolver(function($translator,$data,$rules,$messages){
    return new CustomValidator($translator,$data,$rules,$messages);
});

当创建一个自定义的验证规则,你有事需要为错误消息定义一个自定义占位符。为了实现它,你可以想上面那样创建一个自定义的验证器,并且咋验证器中添加一个replaceXXX函数

protected function replaceFoo($message, $attribute, $rule, $parameters)
{
    return str_replace(':foo', $parameters[0], $message);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值