laravel-admin实战做个简单的客户管理——表单联动中错误信息的解决

    |     2020年12月12日   |   学习偶记   |     评论已关闭   |    2143

前面我做了一个,选择用户类型,然后显示不同的输入框。经测试,联动的输入框的name不能一致,否则验证时候,会出现如下情况:

所以改成如下方式,保存到数据库的解决办法在文章下面。

 

出现了第二个问题,就是验证错误后,下拉联动的输入框被隐藏看不到了。经过查看源码,发现只能自己写代码把它弄出来。

错误现象:选择用户类型后,在输入框里输入错误的内容,提交返回页面后,输入框和验证错误信息不能显示。

最后通过分析,用js的方式来解决。思路是:判断下拉框是否有值,如果有,则显示对应的输入框。输入框的css是cascade-user_type-【mobile、webchat、email】

var checkValue=$("select[name='user_type']").val(); //获取Select选择的Value
var inputName = '.cascade-user_type-'+checkValue;
$(inputName).removeClass("hide");

ps:解决user_name的方法,就是使用laravel-admin的表单回调,

先在form中增加一个隐藏域字段

$form->hidden('user_name');

然后增加字段中忽略,把不需要保存在数据库中的字段忽略掉

$form->ignore(['password_confirmation', 'user_name_2', 'user_name_1', 'user_name_0']);

然后在表单提交前将隐藏域赋值。同时将密码加密保存。【use Illuminate\Support\Facades\Hash; //哈希加密】

// 在表单提交前调用
$form->submitted(function (Form $form) {
//处理下拉框的user_name重新赋值
$userType = request('user_type');
if($userType == 'mobile')
{
//隐藏域user_name赋值
$form->input('user_name',request('user_name_0'));
}
elseif($userType == 'email')
{
//隐藏域user_name赋值
$form->input('user_name',request('user_name_1'));
}
elseif($userType == 'wechat')
{
//隐藏域user_name赋值
$form->input('user_name',request('user_name_2'));
}
else
{
//返回错误状态
request()->session()->flash('user_type_error', $userType);
return back();
}
//将用户密码由明码改成哈希密码
$password = trim(request('password'));
$passwordHash = Hash::make($password);
$form->input('password',$passwordHash);
});

这样就完成了数据库保存。

噢!评论已关闭。