问题描述
在创建用户表单中,我有两个下拉字段,一个角色下拉列表和一个团队下拉列表。当前,角色字段是必需的,但团队字段不是必需的。新用户可以是超级用户,因此不能成为团队成员,因此这就是为什么不要求“团队”字段的原因,但这是由于用户偶尔忘记添加团队而引起的一些问题,因此我们现在需要团队领域也是必需的。因此,我需要进行一些条件验证,如果“角色”字段的所选下拉选项为“超级用户”,则“团队”字段的下拉列表不是必需的,但是如果“角色”字段为任何其他选项,则“团队”字段的下拉列表为必需的。因此,我需要“超级用户”角色以外的所有选定角色的“团队”下拉列表字段。
我以为可以使用Laravel的required_unless,但是我尝试使用该选项的所有尝试均失败了,但是我很可能会搞砸了。解决此需求的最佳选择是什么。一个人将如何实现这一功能?我需要“团队”字段时,只要“角色”下拉列表中的选项不是“超级用户”,就应该是必填字段,但是一旦选择了“超级用户”,则不需要“团队”下拉字段。
我的代码:
StoreUsersRequest
public function rules()
{
return [
'name' => 'required','email' => 'required|email|unique:users,email','last_login_at' => 'nullable|date_format:'.config('app.date_format'),'role' => 'required','role.*' => 'exists:roles,id',];
}
创建表单
<div class="col-sm-4 form-group">
@if(auth()->user()->role->contains(1))
{!! Form::label('role',trans('global.users.fields.role').'*',['class' => 'control-label']) !!}
{!! Form::select('role[]',$roles,old('role'),['class' => 'form-control','id' => 'selectall-role','required' => '']) !!}
<p class="help-block gray">@lang('global.app_see_description_of_user_roles_below').</p>
@if($errors->has('role'))
<p class="help-block">
{{ $errors->first('role') }}
</p>
@endif
</div>
<div class="col-sm-4 form-group">
{!! Form::label('team_id',trans('global.users.fields.team').'',['class' => 'control-label']) !!}
{!! Form::select('team_id',$teams,old('team_id'),['class' => 'form-control select2 autosetup',]) !!}
<p class="help-block"></p>
@if($errors->has('team_id'))
<p class="help-block">
{{ $errors->first('team_id') }}
</p>
@endif
</div>
控制器
public function create()
{
$roletype = Role::where('id','>',1)->orderBy('display_order')->get();
$roles = \App\Role::orderBy('display_order')->get()->pluck('title','id');
$teams = \App\Team::select(DB::raw('concat (name," - ",city) as name,id'))->orderBy('name')->pluck('name','id')->prepend(trans('global.app_please_select'),'');
$create_user = true;
return view('admin.users.create',compact('roles','teams','roletype','create_user'));
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)