开始之前,为方便查看结果,在/Exceptions/Handler.php文件捕获了异常
request并注入到需要验证控制器的方法
return true因为我们身份验证一般不在这里验证
end_date可以很简单的通过start_date来限制时间范围,那么start_date该怎么验证呢?我本来想的是这样的。
curr_date,然后start_date通过这个字段限制范围。测试发现实际并不生效。直接进入了控制器打印的数据
Illuminate\Validation\Concerns、ValidatesAttributes::validateAfterOrEqual方法跳到compareDates方法,并尝试打印了$this->getValue($parameters[0])这时候的$paramters[0]为curr_date总是null
prepareForValidation方法,之后再测试
Laravel的IoC容器config/app.php里有关表单验证的服务提供者
ValidatesWhenResolved对象的类在解析之后会自动调用validate方法IndexTicketRequest类,没有这个方法,去到父类,发现实现了ValidatesWhenResolved,而validate是在trait的ValidatesWhenResolvedTrait
validate方法里分三步主要的$this->prepareForValidation() 在验证之前的准备curr_date,我们来看看新建验证实例便知道答案
$this->validationData()方法拿到request的数据,然后再通过$this->container->call([$this, 'rules'])拿到验证规则,所以我们在rules方法写的自然不生效了,之后的验证便无法继续进行这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.