仅当所有其他规则都通过时添加验证规则,或在Laravel 5.7中的第一个错误时停止验证整个属性集
我想允许用户在本地存储磁盘上创建文件夹。因此,发送到服务器的表单非常简单,具有三个属性:仅当所有其他规则都通过时添加验证规则,或在Laravel 5.7中的第一个错误时停止验证整个属性集,laravel,validation,laravel-5.7,customvalidator,Laravel,Validation,Laravel 5.7,Customvalidator,我想允许用户在本地存储磁盘上创建文件夹。因此,发送到服务器的表单非常简单,具有三个属性: 新文件夹名称-即要创建的文件夹的名称 相对路径-相对于资源根目录创建新目录的目录路径,以及 资产\u id-一个资产的id,我需要这个id来获取资产的根目录 问题是,当我验证这些属性时,我还需要检查用户要创建的文件夹是否已经存在。为此,我制定了一个名为FolderExists的规则。因此,在运行FolderExists之前,我必须确保所有其他规则都已成功通过,因为我的自定义规则应该接受相对路径和资产id,以
FolderExists
的规则。因此,在运行FolderExists
之前,我必须确保所有其他规则都已成功通过,因为我的自定义规则应该接受相对路径和资产id,以便能够构建要检查的路径
这是我的rules()
函数,我正在自定义表单请求中进行验证:
public function rules()
{
return [
'asset_id' => ['bail', 'required', 'exists:assets,id'],
'relative-path' => ['bail', 'required', 'string'],
'new-folder-name' => ['bail', 'required', 'string', 'min:3', new FolderName, new FolderExists($this->input('asset_id'), $this->input('relative-path')]
];
}
所以我的问题是:
只有当所有其他验证规则都通过时,才可以添加FolderExists
或者,当验证器遇到第一个错误时,可能会停止整个验证
这两种选择都可以
谢谢大家! 我终于自己找到了解决办法。这就是我的结局 为了获得所需的结果,我在自定义表单请求的
withValidator()
方法中创建了另一个验证器,第二个验证器将仅处理FolderExists
规则,并且仅在上一次验证失败时处理
public function rules()
{
return [
'asset-id' => ['bail', 'required', 'integer', 'exists:assets,id'],
'relative-path' => ['bail', 'required', 'string'],
'new-folder-name' => ['bail', 'required', 'string', 'min:3', 'max:150', new FolderName]
];
}
public function withValidator($validator)
{
if (!$validator->fails())
{
$v = Validator::make($this->input(),[
'new-folder-name' => [new FolderExists($this->input('asset-id'), $this->input('relative-path'))]
]);
$v->validate();
}
}
如果我们的主验证器通过了,我们将创建另一个验证器,并仅通过已验证的
FolderExists
规则及其参数,然后调用validate()
方法。就是这样。如果条件是:它应该是工作无法理解为什么失败,您确定它失败了吗?在验证时,您会收到所有三个错误,而不是one@LouisR谢谢,但在这里写问题之前,我已经检查了文档,尤其是这一点。如果的话,关于required\u的文档会说“如果另一个字段等于任何值,则验证中的字段必须存在,并且不能为空。”我想这不是我的情况。