11.Laravel5学习笔记:扩展 Validator 类
简单介绍
在 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上。供大家下载吧
11.Laravel5学习笔记:扩展 Validator 类的更多相关文章
- (转)Qt Model/View 学习笔记 (七)——Delegate类
Qt Model/View 学习笔记 (七) Delegate 类 概念 与MVC模式不同,model/view结构没有用于与用户交互的完全独立的组件.一般来讲, view负责把数据展示 给用户,也 ...
- (转)Qt Model/View 学习笔记 (五)——View 类
Qt Model/View 学习笔记 (五) View 类 概念 在model/view架构中,view从model中获得数据项然后显示给用户.数据显示的方式不必与model提供的表示方式相同,可以与 ...
- Typescript 学习笔记五:类
中文网:https://www.tslang.cn/ 官网:http://www.typescriptlang.org/ 目录: Typescript 学习笔记一:介绍.安装.编译 Typescrip ...
- python cookbook第三版学习笔记十:类和对象(一)
类和对象: 我们经常会对打印一个对象来得到对象的某些信息. class pair: def __init__(self,x,y): self.x=x self. ...
- java学习笔记7--抽象类与抽象方法
接着前面的学习: java学习笔记6--类的继承.Object类 java学习笔记5--类的方法 java学习笔记4--类与对象的基本概念(2) java学习笔记3--类与对象的基本概念(1) jav ...
- Caliburn.Micro学习笔记(一)----引导类和命名匹配规则
Caliburn.Micro学习笔记目录 用了几天时间看了一下开源框架Caliburn.Micro 这是他源码的地址http://caliburnmicro.codeplex.com/ 文档也写的很详 ...
- Java学习笔记16---抽象类与接口的浅显理解
抽象类是由abstract修饰的类,定义方式如public abstract class A{...}. 接口由interface修饰,定义方式如public interface B{...}. 抽象 ...
- Linux(10.5-10.11)学习笔记
3.2程序编码 unix> gcc -01 -o p p1.c p2.c -o用于指定输出(out)文件名. -01,-02 告诉编译器使用第一级或第二级优化 3.2.1机器级代码 机器级编程两 ...
- Python学习笔记总结(三)类
一.类简单介绍 1.介绍 类是Python面向对象程序设计(OOP)的主要工具,类建立使用class语句,通过class定义的对象. 类和模块的差异,类是语句,模块是文件. 类和实例 实例:代表程序领 ...
随机推荐
- jquery中的jsonp跨域调用
jquery jsonp跨域调用接口
- JS DOM 实例(5大常用实例)
第1个实例:循环单击变色 <html lang="en"> <head> <meta charset="UTF-8"> &l ...
- win10开机时内存使用率达到99%以上
开始,运行,输入msconfig回车就能看到自启的项目. 搞定! 其实,感觉特别像是输入法的某个监听程序导致内存泄漏,造成的系统问题. 再遇到的时候要认真检查下.
- Mysql学习总结(32)——MySQL分页技术详解
1.什么是数据分页:数据分页就是将很多条记录像书本一样分页,每页显示多少行记录: 2.为什么要数据分页:当我们进行sql语句查询时,假如数据有成千上万行记录,如果在同一个页面去显示,那这个页面得有多大 ...
- HDU 4035
dp求期望的题. 设 E[i]表示在结点i处,要走出迷宫所要走的边数的期望.E[1]即为所求. 叶子结点: E[i] = ki*E[1] + ei*0 + (1-ki-ei)*(E[father[i] ...
- Hadoop学习;測试;启动bug;secondary合并edits到fsimage
一个Hadoop集群拥有多个并行的计算机.用以存储和处理大规模的数据集 Hadoop强调代码向数据迁移 要执行的程序在规模上比数据小的多,更easy移动,此外通过网络移动数据比载入执行程序更花时间,这 ...
- 实战:percona-xtrabackup 2.1.9 for mysql 5.6.19
----1.编译安装percona-xtrabackup yum install cmake gcc gcc-c++ libaio libaio-devel automake autoconf bzr ...
- Android自己定义组件系列【4】——自己定义ViewGroup实现双側滑动
在上一篇文章<Android自己定义组件系列[3]--自己定义ViewGroup实现側滑>中实现了仿Facebook和人人网的側滑效果,这一篇我们将接着上一篇来实现双面滑动的效果. 1.布 ...
- c# 获取文件夹下面所有文件夹列表
方法一: string dirPath = @"D:\App1"; List<string> dirs = new List<string>(Directo ...
- linux文件上传下载
上传本地文件到服务器:scp 文件名 账号@服务器IP:文件路径eg:scp test.txt root@192.168.0.123:/tmp/服务器文件下载到本地:scp 账号@服务器IP:文件 本 ...