【问题标题】:Form input values with Laravel使用 Laravel 形成输入值
【发布时间】:2016-07-28 09:16:54
【问题描述】:

我想构建一个表单,用于为新记录输入数据以及编辑现有记录。

我如何定义表单输入的value 属性,知道它可以是空白还是现有记录的值,如果我正在创建新记录或编辑,或者用户输入的输入,如果验证失败?

我当前的解决方案是将old() 与我正在编辑的模型实例结合起来。例如,在编辑用户数据的表单中,用户名的输入元素的值类似于old('name', !empty($user) ? $user->name : '')

这是做这类事情的正确方法还是有更简单(更工匠)的方法?

我正在使用 Laravel 5.2。

提前致谢。

【问题讨论】:

    标签: forms laravel


    【解决方案1】:

    在 Laravel 5 中有几个使用更新表单的选项。为了让我的视图更清晰,我更喜欢使用 HTML/Form helper library from Laravel Collective。它有据可查,并提供开箱即用的form-model binding,它可以处理默认值,而无需将逻辑添加到您的视图中。只需通过 Composer ("laravelcollective/html": "5.2.*") 添加库并将服务提供者和别名添加到您的config/app.php。 HTML 帮助器以前随 Laravel 4 一起提供,但在 Laravel 5 发布时被移至外部库。

    如果您希望避免使用额外的库,this post in the Laracast forum 提供了包含预填充字段的更新表单的完整示例。

    【讨论】:

      【解决方案2】:

      您应该使用表单模型绑定和部分。
      首先创建 3 个文件 - create.blade.phpedit.blade.php_form.blade.php。在_form.blade.php 中写这样的内容:

      {!! Form::label('title', 'Title:') !!}
      {!! Form::text('title', old('title')) !!}
      

      create.blade.php

      {!! Form::open(['route' => 'someroute']) !!}
      @include('_form.blade.php')
      {!! Form::submit('Create') !!}
      {!! Form::close() !!}
      

      edit.blade.php

      {!! Form::model($model, ['route' => 'someroute']) !!}
      @include('_form.blade.php')
      {!! Form::submit('Save Changes') !!}
      {!! Form::close() !!}
      

      在此处了解更多信息:https://laravelcollective.com/docs/5.2/html#form-model-binding

      说明性更新:
      使用表单模型绑定模型具有的所有属性都将被放入表单字段。例如,我们的模型有title字段,所以如果我们像这样打开表单:Form::model($model)并输入Form::text('title')字段,它将被插件自动填充。

      【讨论】:

        【解决方案3】:

        通过形式和本地化,我在我完成的每个项目中都使用了 3 个包:

        干净,易于阅读和贡献。

        【讨论】:

          【解决方案4】:

          或者...而不是每次在视图中都有一个三元组,您可以只允许您在编辑视图中使用的相同变量可用于创建视图,然后将该变量分配给一个空实例该模型将允许对象的每个属性具有空值。这将在控制器而不是视图中完成。

          所以你可以这样做:

          public function create()
          {
              $user = New User;
              return view('add_user')->with('user', $user);
          }
          

          因为编辑可能类似于

          public function edit($id)
          {
              $user = User::find($id); (or auth session id or whatever)
              return view('edit_user')->with('user', $user);
          }
          

          这样你就可以拥有:

          old('name', $user->name) 
          

          在以 $user->name 作为默认值的部分形式中,这将在创建视图中显示为空字符串,并在编辑视图中显示实际数据。

          【讨论】:

            猜你喜欢
            • 2019-06-17
            • 2020-09-03
            • 2021-04-08
            • 2014-03-02
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-11-07
            相关资源
            最近更新 更多