【问题标题】:Validation - file name required if file upload has file验证 - 如果文件上传有文件,则需要文件名
【发布时间】:2020-02-17 08:43:18
【问题描述】:

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

我现在的代码如下所示:

我尝试了所有方法,例如 required_unless、required_if,但没有任何效果。也许我做错了,或者我的想法不符合这个验证规则?

Controller 中的验证:

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,',

【问题讨论】:

  • 为什么files_label输入字段没有类型?
  • 第一个输入缺少一个类型,应该是type="text"(如果没有提供,那是默认值)。尝试将您的验证设置为 'files_label' =&gt; 'required_if:file|string', - 另外,在 type="file" 上使用 old() 将无法正常工作。
  • 哦对了忘了那个...现在设置类型... required_if 需要2个参数...也试过...
  • @EdizDeniz 当你添加字符串验证时,它需要一个字符串,除非你给它。因此,如果您将 files_label 输入保持为空,则会出现错误
  • 但是如果我做某事:nullable|string,或者有时|string 它不会给出这种错误。与 required_unless 有何不同? required_unless 还有一个不需要的情况,这意味着是否可以为空?

标签: php laravel validation laravel-5 eloquent


【解决方案1】:

我认为在这种情况下你需要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

【讨论】:

  • 也试过了:错误:“文件标签必须是字符串。”仍然出现,我不知道为什么...如果我从验证中删除“|string”部分 required_unless 工作正常...但我不明白为什么...
  • @EdizDeniz 那是因为 files_label 缺少类型
猜你喜欢
  • 2012-08-30
  • 2017-11-08
  • 2011-05-13
  • 2019-05-04
  • 2023-04-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-26
相关资源
最近更新 更多