Laravel表单验证字段不为 null 的时候再验证
在 Laravel
表单验证中我们常常会需要对一些非必填的字段进行校验,比如:string
,
但是如果如果 data 里面的对应字段是 null,则验证会失败,比如:
1 | $data = [ |
结果:
1 | array:1 [ |
如何让其通过验证?
如果我们的这个字段允许为 null 的话,可以加上 nullable 验证规则,比如:
1 | $rules = [ |
当然如果保存到数据库的时候不能为 null 的话,就不能这么写了。
在 Laravel
表单验证中我们常常会需要对一些非必填的字段进行校验,比如:string
,
但是如果如果 data 里面的对应字段是 null,则验证会失败,比如:
1 | $data = [ |
结果:
1 | array:1 [ |
如果我们的这个字段允许为 null 的话,可以加上 nullable 验证规则,比如:
1 | $rules = [ |
当然如果保存到数据库的时候不能为 null 的话,就不能这么写了。
dcat-admin 中的
Form
, Show
, Grid
,
Column
等内置类都 use 了
Dcat\Admin\Traits\HasBuilderEvents
这个 trait。
通过这个 trait,我们可以对 Form
, Show
,
Grid
, Column
的生命周期做一些类似勾子的操作。
resolving
主要用在统一自定义某些页面组件是否展示,composing
事件用于页面渲染时候做一些额外的操作。常用的主要是
resolving
。
1 | // 默认禁用表单的一些 checkbox 以及 header |
1 | $form->composing(function ($form) { |
1 | protected static function addScript(Form $form) |
页面渲染的时候,添加一段自定义的 js 代码。
最近在使用 laravel/fortify 的过程中发现,在不同的环境中,一个环境 2fa 验证正常,但是另外一个环境验证一直失败,即使输入的是正确的验证码。
后来想起了 totp 算法相关的一个很关键的点,就是生成的验证码是基于时间的,这样一来,如果某一个环境上的时间是不对的(这里的不对是指不是那个环境时区上对应的准确时间),是不是和客户端生成的验证码不一样了。
后来经过验证发现,的确是这个原因导致的。
只有服务器的时间是正常的时间,UTC + 时区对应的小时数这样,验证都不会有问题。
另外,快速设置时间的方式:
1 | date -s '20:09:41 2019-12-08' |
bash 脚本:
1 | #!/bin/sh |
我们按照普通二分查找的方式获取中点,这个时候和普通有序数组有一个不一样的地方,有可能这个数组不是单调递增的。
1. 如果是单调递增的,按照普通二分查找的方式查找即可 2.
如果不是单调递增的,判断 value
是否在这个区间内,如果不在,返回 -1 即可。判断方法比较简单,如果
$value < $array[$low]
并且
$value > $array[$high]
那就说明不在该区间内(因为是循环有序,比如[5,6,1]
里面查找2)。
3. 如果在这个区间内,还需要判断是否等于临界点,因为
$array[$low]
或者 $array[$high]
有可能等于
value
,比如 [5, 6, 1]
里面查找 1
1 | $arr1 = [4, 5, 6, 1, 2, 3]; |