在一个livewire表单中为不同的卡定制errorBag



我的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模型的规则。

希望这能回答你的问题并帮助你。关于如何编写代码

的屏幕截图

相关内容

  • 没有找到相关文章

最新更新