Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/laravel/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅当所有其他规则都通过时添加验证规则,或在Laravel 5.7中的第一个错误时停止验证整个属性集_Laravel_Validation_Laravel 5.7_Customvalidator - Fatal编程技术网

仅当所有其他规则都通过时添加验证规则,或在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,以

我想允许用户在本地存储磁盘上创建文件夹。因此,发送到服务器的表单非常简单,具有三个属性:

  • 新文件夹名称-即要创建的文件夹的名称
  • 相对路径-相对于资源根目录创建新目录的目录路径,以及
  • 资产\u id-一个资产的id,我需要这个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的文档会说“如果另一个字段等于任何值,则验证中的字段必须存在,并且不能为空。”我想这不是我的情况。