验证规则写在哪里比较好?
对于验证规则,可以写在controller里,也可以重载一个Request,写在它里面,还有使用repository层的,规则写在repository里。个人倾向于直接写在controller里,不知大家有什么看法?
我会选择放在 Request 里,PHPHub 也是。
@Summer 写在request里有一个问题,新建和编辑有时候验证规则有少许的不同,这个时候你得写两个不同的request,感觉增加了工作量。
@程事不足 我们项目现在包括有的 index 页面都使用 request 的,虽然是几个搜索参数,但是我们更倾向于统一管理,每一层做该做的事儿,到控制器里的基本都是纯净的数据。
验证 request 请求参数,放在 Request 里面。
@程事不足 之前项目接手的时候新建和编辑验证规则是不同的 Request 文件,我给整合到一个 Request 了,其实是可以用一个 Request 来验证新建、编辑的
@Kelvin 如何整合?在request里能区分什么时候是新建,什么时候是编辑吗?
@程事不足
@Kelvin 判断请求类型
POST
或者PUT
返回不同的rules
?@zhuzhichao 你这个思路应该可行
@程事不足 贴下代码吧,我是这么解决的
UserRequest 定义
Controller 处理逻辑
@Kelvin 你这种做法,我早就知道了,我的意思是新建的规则和更新的规则有少许不同的时候,这样就要两个不同的类,不过现在根据zhuzhichao提的思路,已经可以在一个类中实现了。另外你的id不是自动生成的吗?为什么还要验证规则呢?
@程事不足 创建的时候不验证 id, id 是主动生成的,更新的时候需要根据 id 来验证数据是否存在
@程事不足 少许不同?能举个例子不?
@Kelvin 更新的时候,id也不是通过request的,是在url里传过来的
@程事不足 不过建议别用我说的那个“奇巧淫技”了,还是正规点,多建一些 class 文件吧。
@zhuzhichao 感觉这样很好呀
public function rules()
{
if ($this->isMethod('post')){
return [
'name'=>'required|unique:roles|max:255',
'display_name'=>'required|max:255'
];
}else if($this->isMethod('put')||$this->isMethod('patch')){
return [
'display_name'=>'required|max:255'
];
}else {
return [];
}
}
如果要自定义messages的话,也只写在一个类中就行了
还有更好的思路么..
@gankbat @tablecell 回复空间有限,所以我开了新帖介绍自己的规则验证的设计 分享:分享验证规则层的设计
如果前后端需要采用同一套验证规则该如何设计