【发布时间】: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' => '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