我的livewire表单中有四张卡片,用户可以选择他们想要回答的卡片,并且可以是多张卡片。因此,我做了一个条件,检查哪些卡片被选中,只验证数据,并根据选中的卡片创建数据库条目。
CardFormComponent.php:
public function submit()
{
$user = auth()->user();
if($this->showDiv1){
$salary_data = $this->validate([
'emp_name' => 'required',
'emp_length' => 'required',
'emp_monthly_gross_salary' => 'required',
'monthly_allowance' => 'required',
])->validateWithBag('salary_error');
}
if($this->showDiv2){
$gig_data = $this->validate([
'role' => 'required',
'est_earnings' => 'required',
])->validateWithBag('gig_error');
}
if($this->showDiv3){
$self_data = $this->validate([
'business_type' => 'required',
'other_type' => 'required',
'date_com_trade' => 'required',
'no_of_emp' => 'required',
'business_registration_number' => 'required',
'office_ph_no' => 'required',
'share_of_bus' => 'required',
'last_2_year_profit' => 'required'
])->validateWithBag('self_error');
}
if($this->showDiv4){
$investment_data = $this->validate([
'inv_name' => 'required',
'yearly_earning' => 'required',
])->validateWithBag('invest_error');
}
$user->user_current_step = Constant::CURR_STEP_COMMITMENT;
$user->save();
alert('success','Your income are saved.');
return redirect()->route('borrower.landing');
}
因此,这段代码用于保存所有卡片中的用户输入,但是,例如,当我选择两张卡片并提交一个空表单时,错误消息仅出现在第一张卡片中。当单独测试时,所有卡都出现错误消息,所以我确信这不是显示消息的问题。我的假设是,一旦第一张卡片中的验证失败,它就会在进行其他循环之前直接返回到视图。有没有办法防止控制器在通过所有验证之前返回到视图?
附加说明,一位资深人士建议我对每个卡片使用错误包,从而解释代码中的validateWithBag('name),但从我的研究来看,我似乎只能将一个错误包传递给视图?而且validateWithBag()似乎也会自动重定向。
是否有任何方法从我的代码或任何替代方案,我得到所有的错误信息显示根据所选的卡片?
我从我的facebook帖子中得到了这个问题的答案,我想我应该在这里分享一下。
答:
是的,Laravel validate()方法将停止执行代码并返回错误。您可以尝试在if语句的末尾只运行一次validate(),在每个if语句中,您应该添加表示Livewire模型的规则。
希望这能回答你的问题并帮助你。关于如何编写代码
的屏幕截图