【问题标题】:What is the best practice to show old value when editing a form in Laravel? [closed]在 Laravel 中编辑表单时显示旧值的最佳做法是什么? [关闭]
【发布时间】:2016-11-22 12:49:21
【问题描述】:

我正在编写编辑表单的逻辑,在输入中显示数据时遇到了一些复杂情况。

当我最初显示表单时,我显示的记录值如下:

value="{{$dog->title}}"

然后当表单没有通过验证时,我需要显示旧的输入,这样用户就不会丢失他已经输入的内容。所以我需要有一种方法来显示旧数据,例如:

value="{{old('title')}}"

因为我需要输入旧数据以防万一,所以我最终得到了以下代码:

value="{{$dog->title or old('title')}}"

在控制器中,我检查 Request 是否有旧输入,我为 $dog var 分配了一个空值。

我想问这是否被认为是一种好的做法,还是有更好和“正确”的方法来做到这一点?

【问题讨论】:

    标签: laravel validation laravel-blade


    【解决方案1】:

    旧数据:输入类型文本 | 电话 | 号码 | ...

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

    旧数据:输入类型复选框 | 收音机

     <input type="checkbox" {{ old('my_checkbox') == 'on' ? 'checked' : '' }} name="my_checkbox">
    

    【讨论】:

      【解决方案2】:

      我知道这已经得到了回答,但我想我以后会在这里为其他人留下一点 sn-p。

      在@ikurcubic 发布的输入上设置旧值可以在单选按钮或选择上以相同的方式使用:

      <input type="text" name="name" value="{{ old('name', $DB->default-value) }}" />
      

      选择选项:

      <option value="Jeff" {{ old('name', $DB->default-value) == 'Jeff' ? 'selected' : '' }}>Jeff</option>
      

      单选按钮:

      <input type="radio"  name="gender" value="M" {{ old('name', $DB->default-value)== "M" ? 'checked' : '' }} />
      

      另一种方式;编写一个小的 if 语句来确定应该评估哪个值:

      @php                                  
      if(old('name') !== null){
          $option = old('name'); 
      }
      else{ $option = $database->value; }
      @endphp
      
      <select name="name">
         <option value="Bob" {{ $option == 'Bob' ? 'selected' : '' }}>Bob</option>
         <option value="Jeff" {{ $option == 'Jeff' ? 'selected' : '' }}>Jeff</option>
      </select>
      
      
      <input type="radio"  name="gender" value="M" {{ $option == "M" ? 'checked' : '' }} />
      
      <input type="radio"  name="gender" value="F" {{ $option == "F" ? 'checked' : '' }} />
      

      使用数组名称设置输入的旧值,例如 name="name[]":

      <input type="text" name="name[]" value="{{ old('name.0) }}" />
      

      这将为您提供索引为 0 的输入的旧值。

      我已经测试过了,它可以工作。

      【讨论】:

      • 所以,我尝试了选择选项,但它不起作用。您正在使用 selected PHP 常量,这会引发异常。解决方法是用双引号将所选内容括起来(使其成为字符串)
      • 感谢您..我的选择正在使用此代码,但无法使用复选框,有什么帮助吗?
      【解决方案3】:

      另一种方法是从dog 类中获取数据,如下所示:

      value="{{old('title') ?? $dog->title }}"
      

      为什么?因为old() 用于验证;当验证失败时,输入将在该字段中保持可用。在验证尚未触发的情况下,value 将填充为$dog-&gt;title

      【讨论】:

        【解决方案4】:

        我在我的应用程序中解决了这个问题 如果你想在输入中获取旧的先前插入的值,你应该试试这个 我确实喜欢这个。

        function SaveData(Request $request)
        {
               $sValidationRules = [
                'firstname' => 'required',
                'lastname' => 'required',
                'email' => 'required',
                'phone' => 'required',
              ];
        
              $validator = Validator::make($request->all(), $sValidationRules);
        
              if ($validator->fails()) // on validator found any error 
              {
                // pass validator object in withErrors method & also withInput it should be null by default
                 return redirect('Your Route Hare')->withErrors($validator)->withInput();
              }
        
        
              Employee::create($request->all());
        
              return redirect(' your route hare ');
        }
        

        & 然后使用 {{ Request::old('firstname') }} 在输入字段值中获取旧数据 快乐编码。 :)

        <input type="text" name="firstname" id="firstname"  value="{{ Request::old('firstname') }}" class="form-control" placeholder="First Name">
        

        【讨论】:

          【解决方案5】:

          如果在会话中没有找到旧数据,old 函数有 default 参数。

          function old($key = null, $default = null)
          

          您可以将模板中的表达式替换为

          value="{{old('title', $dog->title)}}"
          

          【讨论】:

          • 有时当您访问嵌套属性时,如果该属性不存在,它会抛出错误以跳过我做这样的事情old('manager_id', $department-&gt;manager-&gt;id ?? '')
          【解决方案6】:

          你做事的方式没有错,因为 Laravel 提供了多种方法来处理你所描述的情况。

          我的建议是使用 Laravel 集体表单和 HTML 包来构建您的表单。如果验证失败,此包将自动处理将旧请求值绑定到您的表单

          https://laravelcollective.com/docs/5.2/html

          【讨论】:

          • 是的,他正在寻找表单模型绑定。这正是他想要的,它节省了一些代码编写:)
          猜你喜欢
          • 1970-01-01
          • 2020-06-10
          • 1970-01-01
          • 1970-01-01
          • 2022-10-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2017-01-06
          相关资源
          最近更新 更多