简单介绍
在 Laravel5
中,本身已经提供了丰富的验证规则供我们使用,可是天下应用奇葩多,做为程序猿你会发现永远都有新的验证规则诞生,光是组合已经解救不了你的项目了。这个时候就须要我们扩展 Validator
类,来使之帮助项目继续健康向前发展。
官方给了多种扩展 Validator
的方式,我独爱直接扩展该类,可是关于这一点。官文中又写的寥寥数语。确实新人有些无奈。这里具体说一下,怎样扩展它。
扩展验证类
首先。扩展的收个问题是。我的扩展类应该放在哪儿才好呢?我的意见是:直接在app文件夹下,建立一个文件夹:
app/Extensions
,然后这个文件夹中专门用来存放你的各类扩展。建立文件夹后,我们在这个文件夹中建立一个php文件
MyValidator.php
文件。
<?php
namespace App\Extensions;
use Illuminate\Validation\Validator;
use App\Libary\Util\Validate;
/**
*
* @desc 扩展验证类
* @author helei
*/
class MyValidator extends Validator
{
/**
* 验证11位手机号码
*/
public function validateMobile($attribute, $value)
{
if (is_null($value)) {
return false;
}
return Validate::isMobile(trim($value));// 这里也能够直接将验证规则写在这里
}
}
这段代码表达了这么一个主题:验证输入的手机号码,是不是一个合法的手机号码。有一个须要特别注意的是 [我们自己定义的验证方法,必须要以 validate
开头]。
- 接下来就是要把我们写的验证类,注冊到容器中,关于 怎样注冊自己的服务到容器 请參考这篇之前的文章
这里我还是在啰嗦一下,官方文档中,就给了这么一句:
接下来。您须要注冊您自己定义验证器扩展:
Validator::resolver(function(translator, data,rules, messages)
{
return new MyValidator(translator, data,rules, messages);
});
老实说,我人比較SB。当时看到这里的时候,我就郁闷了,你让我注冊。我在哪儿注冊呢?天下之大,处处可注冊,有没有一个规范?说实话,还真没有。真的是,你如今那个服务提供者里边注冊都行,既然如此,我就直接将这部分注冊代码写在了 AppServiceProvider
里边。具体代码例如以下:
class AppServiceProvider extends ServiceProvider
{
/**
* Bootstrap any application services.
*
* @return void
*/
public function boot()
{
/*注冊自己定义验证类*/
/* Validator::resolver(function($translator, $data, $rules, $messages){
return new SalonValidator($translator, $data, $rules, $messages);
}); */
$this->app[‘validator‘]->resolver(function ($translator, $data, $rules, $messages){
return new SalonValidator($translator, $data, $rules, $messages);
});
}
OK,这里写了之后。请一定记得将该服务提供者写到 app.php
这个配置文件里去哈。假设你不知道怎么写。说明你没有看我说的 这篇文章
到了这儿。还不算完,另一步。那就官网假设验证错误,都会给出提示信息。这个提示信息,我们在哪里去弄呢?大家能够打开 resources/lang/zh/validation.php
这个文件,我的改动例如以下图:
这里另一点要说明哦。假设你要使用 zh
文件下的信息,请一定在 app/config/app.php
中将locale设置为locale=zh
。
这里有些同学说,我们怎么没有zh这个文件呢?事实上这是laravel的语言包,网上相当的多啦。只是这里为了大家方便,我免费放一个在CSDN上。供大家下载吧