验证-如果文件上传有文件,则需要文件名

时间:2019-10-21 09:18:52

标签: php laravel validation laravel-5 eloquent

具有用于库存的表单控制器,人们可以在其中创建项目时添加项目以及添加账单,手册等。我的问题是,我也想获得一个文件名(例如,上载文件的账单),但是如果他们确实在表格中选择了文件,我只想要它。

我的代码现在看起来像这样:

我尝试了一切,例如required_unless,required_if,但没有任何效果。也许我做错了,或者我的想法不适用于此验证规则?

控制器中的验证:

public function save(Request $request)
    {
        $validatedData = $request->validate([
            'file' => 'nullable|file',
            'files_label' => 'required_unless:file,empty|string',
        ]);

我的html中的错误消息是: files_label必须是字符串(所以我想它仍然是必需的)...

我的刀片看起来像这样

<input class="form--textinput" name="files_label" id="files_label" value="{{old('files_label')}}">
<input type="file" class="custom-file" name="file" id="file" value="{{old('file')}}">

如果我选择要上传的文件,我只需要file_label怎么办?

更新1:也使用type =“ text”进行了尝试。仍然出现错误:“文件标签必须是字符串。”

更新2:因此,我删除了类型要求“字符串”,现在看起来像是可以使用。他不希望files_label字段为字符串。 required_unless现在也可以正常工作了。有人可以告诉我为什么会这样吗?如果根本不需要该字段,为什么他要一个字符串?

代码现在看起来像这样:

'file' => 'nullable|file',
'files_label' => 'required_unless:file,',

1 个答案:

答案 0 :(得分:0)

在这种情况下,我认为您需要required_with。像这样

$validatedData = $request->validate([
                'file' => 'nullable|file',
                'files_label' => 'required_with:file,empty|string',
            ]);

https://laravel.com/docs/5.5/validation#rule-required-with