为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
蛊毒传说 2024-01-19 17:25:07
编辑:您的解决方案适用于文本输入和文本区域,但复选框对我来说无法正常工作。这是我原来的复选框:{{ 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>
查看完整描述

2 回答

?
aluckdog

TA贡献1847条经验 获得超7个赞

旧值来自输入名称


<input type="text" name="input" value="{{old('input')}}"

例子


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

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

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

  {{ 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

形式::复选框:

  1. 第一个参数:名称

  2. 第二个参数:值

  3. 第三个参数:检查或未检查(true 或 false)

  4. 第四个参数:附加属性

请注意,值是属性(值),检查是属性(检查)然后

{{ 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 的第四个参数中添加内联事件来更改运行时的默认值


查看完整回答
反对 回复 2024-01-19
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

如果我理解正确的话,你应该这样做:

old('name', isset($user) ? $user->name : ''),

在这里,您尝试获取旧name输入,如果它不存在,则在第二个参数 odold函数中您将获得默认值,如果用户存在,则该值是用户名

查看完整回答
反对 回复 2024-01-19
  • 2 回答
  • 0 关注
  • 143 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信