自定义请求验证错误后获取表单上的旧值或用户变量值,使用两种不同的表单进行查看

编辑:


您的解决方案适用于文本输入和文本区域,但复选框对我来说无法正常工作。


这是我原来的复选框:


{{ Form::checkbox('active', true, (isset($user->active)) ? old($user->active) : true, ['class' => 'custom-control-input', 'id' => 'active']) }}

我已经尝试了很多可能的解决方案,例如添加old('active', isset($user) ? $user->active: true),但是当发生错误时,我会丢失此输入中的值。在控制器上,我正在检查这一点,但是如果我将输入更改为“新解决方案”,则在我的数据库上活动始终为 false:


if(!array_key_exists('active', $validated)){

    $validated = array_add($validated, 'active', '0');

}

原始问题(部分解决):


我有一个刀片视图调用编辑两种形式 ,但每个形式都调用自己的方法/路线。一种表单用于编辑/存储用户,另一种表单是模式中的用于更改用户密码的表单。当我更改密码并且没有发生验证错误时,另一个表单仍然具有通过索引方法从old()或 $user 变量获取的所有值。但是,例如,如果密码不匹配,则会发生验证错误,并且编辑/存储用户表单中的值会消失。


表单非常简单(请记住,它们位于同一视图上,给我带来问题的是编辑/创建表单),并且每个表单都从UserController调用不同的方法


编辑用户表格1(简化)


@if($user->exists)

    {{ Form::model($user, ['route' => ['users.update', $user], 'class' => 'needs-validation', 'novalidate'=>'']) }}

    @method('PATCH')

@else

    {{ Form::model($user, ['route' => ['users.store'], 'class' => 'needs-validation', 'novalidate'=>'']) }}

    @method('POST')

@endif

@csrf

<div class="form-group">

<div class="row">

    <div class="col-sm-4">

        {{ Form::label('cif', __('users.cif'), ['class' => 'form-label']) }}

        {{ Form::text('cif', (isset($user->cif)) ? old($user->cif) : '', ['class' => 'form-control', 'required','maxlength'=>'12', 'minlength'=>'9']) }}

        {{ Form::hidden('validate','', ['class' => 'form-control', 'required', 'id'=>'validate']) }}

    </div>

    <div class="col-sm-6">

        {{ Form::label('name', __('users.name'), ['class' => 'form-label']) }}

        {{ Form::text('name', (isset($user->name)) ? old($user->name) : '', ['class' => 'form-control','required','maxlength'=>'255']) }}

    </div>

    <div class="col-sm-2">

        {{ Form::label('initials', __('users.initials'), ['class' => 'form-label']) }}

        {{ Form::text('initials', (isset($user->initials)) ? old($user->initials) : '', ['class' => 'form-control', 'required','maxlength'=>'5']) }}

    </div>

</div>



蛊毒传说
浏览 144回答 2
2回答

aluckdog

旧值来自输入名称<input type="text" name="input" value="{{old('input')}}"例子<div class="col-sm-4">&nbsp; {{ Form::label('cif', __('users.cif'), ['class' => 'form-label']) }}&nbsp; {{ Form::text('cif', old('cif', $user->cif ?? ''), ['class' => 'form-control', 'required','maxlength'=>'12', 'minlength'=>'9']) }}&nbsp; {{ Form::hidden('validate','', ['class' => 'form-control', 'required', 'id'=>'validate']) }}</div>//$user->cif ?? '' <- left or right hand-side operand, return right-hand if left is null or undefined//old('input', $user->cif ?? '') <- if old input available, use old input, if not, $user will be displayed形式::复选框:第一个参数:名称第二个参数:值第三个参数:检查或未检查(true 或 false)第四个参数:附加属性请注意,值是属性(值),检查是属性(检查)然后{{ Form::checkbox('active', true, (isset($user->active)) ? $user->active : true, ['class' => 'custom-control-input', 'id' => 'active']) }}//2nd parameter (true) will always set checkbox value to 1(true)//(isset($user->active)) ? $user->active : true <- will set default to true (checked) if $user is null or undefined//maybe try{{ Form::checkbox('active', $user->active ?? false, $user->active ?? false) }}//if $user != null, put $user->active else put false//if $user != null, set checked value based on $user->active else put false在 html 中看起来像这样<input type="checkbox" value="1" checked="checked">那么你需要onchange="$(this).is(':checked') ? $(this).val(1) : $(this).val(0);"在 form::checkbox 的第四个参数中添加内联事件来更改运行时的默认值

翻过高山走不出你

如果我理解正确的话,你应该这样做:old('name', isset($user) ? $user->name : ''),在这里,您尝试获取旧name输入,如果它不存在,则在第二个参数 odold函数中您将获得默认值,如果用户存在,则该值是用户名
打开App,查看更多内容
随时随地看视频慕课网APP