【发布时间】:2020-09-28 18:39:01
【问题描述】:
我创建了一个动态表单来输入远足装备项目。一开始,用户看到的只是一个“选择齿轮类别”下拉菜单,并且根据选择的齿轮类别(例如:“避难所”) - 出现另一个下拉菜单供用户选择齿轮项目的类型(例如: “帐篷”)。然后,一旦做出选择,用户就会得到一个通用形式的一般特征(如价格、重量、品牌、名称等)+ 一个视图部分,根据类型(如果它是一个帐篷)获取(使用 axios)特殊特征- 它会得到人数,如果它是一个背包 - 承载能力等)
具有特殊功能div的表单结构示例:
<div class="form-group col-md-6">
<select class="custom-select" name="manufacturer_id">
<option value="" selected>Brand</option>
@forelse ($manufacturers as $manufacturer)
<option value="{{ $manufacturer->id }}"
{{ (old("manufacturer_id") == $manufacturer->id ? "selected" : "") }}>
{{ $manufacturer->name }}</option>
@empty
<option>No manufacturers</option>
@endforelse
</select>
<small id="manufacturerHelp" class="form-text text-muted ">Not on our list? - <a
href="#" data-toggle="modal" data-target="#manuf_modal">Add
new</a>.</small>
@error('manufacturer_id')
<small class="text-danger">{{ $message }}</small>
@enderror
</div>
</div>
<div class="container pt-3" v-show="formDisplay" id="itemType"
style="background: #e1f7d5">
<!-- This div displays the partial view related to the sub category chosen -->
</div>
到目前为止一切顺利。我设法通过我的控制器将数据分配到适当的表中。这是我的“商店”方法:
public function store(){
$data = request()->validate([
'gear_categories_id' => 'required',
'sub_categories_id' => 'required',
'name' => 'required',
'manufacturer_id' => 'required',
]);
$gearItem = auth()->user()->gearItem()->create($data);
$featureModel = SpecialFeature::where('sub_categories_id', $gearItem->sub_categories_id)->value('model_name');
$specialFeatures = 'App\\'.$featureModel;
$featuresData['gear_items_id'] = $gearItem->id;
$featureNames = SpecialFeature::where('sub_categories_id', $gearItem->sub_categories_id)->get();
foreach ($featureNames as $featureName) {
if (SpecialFeature::where('required', 0)->get()){
$featuresData[$featureName->feature_name] = request($featureName->feature_name);
} else {
$featuresData = request()->validate([
$featureName->feature_name => 'required'
]);
}
}
$specialFeatures::create($featuresData);
return redirect('/gearitem/'.$gearItem->id);
}
问题是,当我故意不填写表单中的必填字段时 - 而不是保持表单显示稳定并显示消息错误 - 整个事情消失了,只留下顶部下拉(齿轮类别) 您必须再次重新选择类别 - 才能看到错误。
另外一件事 - 如果在获取的“特殊功能” div (id="itemType") 中有必填字段 - 当用户不填写这些字段时,甚至不会显示错误。 @error 被完全忽略!我在这里做错了什么?
【问题讨论】:
-
良好的代码缩进将帮助我们阅读代码,更重要的是,它将帮助您调试代码Take a quick look at a coding standard 为您自己的利益。您可能会被要求在几周/几个月内修改此代码,最后您会感谢我的。
-
它在我的 IDE 中正确缩进,当我将它复制到这里时,它变得一团糟。