在控制器里面,我们用了一些验证的规则 .. 去验证用户在表单里面输入的内容是不是符合我们的规定 .. 这些验证的功能可以把它放在一个单独的 Validator 里面 .. 然后可以在路由上面使用指定的 Validator .. 这样就不需要把这些验证功能的代码放在控制器里了 ..
下面我们先去给这个 ProfileController 里的 update 这个方法需要的验证功能去创建一个 Validator .. 在命令行的下面 .. 执行一下 adonis make 一个 validator .. 名字可以是 UpdateProfile ..
回到项目 .. 默认这些 Validator 都会放在 app .. Validators 这个目录的下面 .. 打开刚才创建的这个 UpdateProfile ...
rules
默认在这个类里面,会有一个 rules 方法 .. 它返回的东西就是验证的规则 .. 复制一下在 Profile 控制器的 update 方法里面定义的这些 rules .. 把它们粘贴到 UpdateProfile 这个 Validator 的 rules 方法里面 ..
注意这些规则里面用了一个 auth.user.id .. 这个 auth 是 context 对象里的一个属性 .. 在 Validator 里面,可以使用 this.ctx 得到表示当前请求的 context 对象 .. 它里面就是我们经常用的 request .. response .. session 这些东西 ..
在这个方法里面,先添加一个 user ... 让它等于 this.ctx.auth.user ..
然后把规则里面需要用的当前登录的用户的 id ,换成 user.id 来表示 ..
validateAll
想同时验证所有的规则 .. 可以在这个 Validator 里面,添加一个 validateAll 这个 getter 方法 .. 让它 return true ...
messages
如果你想定制一下验证失败的错误信息 .. 再添加一个 messages getter 方法 .. 方法 return 的就是一个自定义的错误信息对象 ..
比如 username 字段里面有个 required 规则 .. 定制这个规则的错误信息 .. 可以这样 .. username.required ... 它的值就是错误信息 .. Username can\'t be blank
再设置一下 username 上的 unique 这个规则的验证信息 .. Username is already taken
然后是 email 字段上的 required 规则 ... Email can\'t be blank .. 再设置一下它的 email 这个规则 .. Email is invalid .
这个字段上还有一个 unique 规则 .. Email is already taken ..
规则里面还有一个 github 字段 .. 用的规则是 unique .. Github account is used by someone else
fails
下面我们再定义一下验证失败以后要做的事情 .. async .. 添加一个 fails 这个方法 .. 接受的是 errorMessages 这个参数 .. 表示错误信息 .. 先把 session ... 还有 response 从 this.ctx 里面拿出来 ..
再用一下 session ... withErrors .. 错误信息是 errorMessages .. 然后 flashAll ..
再 return 一个重定向 .. response.redirect .. back ..
应用
现在我们就定义好了这个 Validator ... 回到 Profile 这个控制器 .. 去掉导入的 validateAll .. 再去掉 update 方法里面的这些验证功能的代码 ..
然后打开应用的路由 ... 找到 profile.update 这个路由 ... 在它的上面可以用一下刚才我们定义的 Validator ..
添加一个 validator 方法 .. 要用的是 UpdateProfile ..
试验
现在可以再去试一下 ... 打开用户账户的设置页面 ...
去掉用户名 .. 直接更新 .. 会提示 Username can't be blank .. 这个就是我们在 UpdateProfile 这个 Validator 里面,给 username 的 required 这个规则定制的一个错误信息 ..
再设置一个无效的 Email 地址 .. 会提示 Email is invalid
再输入一个已经被别人使用的 github 帐号 .. 提示 Github account is used by someone else .
说明我们创建的 UpdateProfile 这个 Validator ,成功的用在了这个更新用户帐户的表单上 ..