我想构建一个表单,用于输入新记录的数据以及编辑现有记录。
我如何定义表单输入的value
属性,知道它可以是空白或现有记录的值,如果我创建新的或编辑,如果验证失败,还是用户输入的输入?
我目前的解决方案是将old()
与我编辑的模型实例结合起来。例如,在用于编辑用户数据的表单中,用户姓名的输入元素的值将类似于old('name', !empty($user) ? $user->name : '')
。
这是做这种事情的正确方法还是更容易(更多工匠)的方式?
我使用的是Laravel 5.2。
提前致谢。
答案 0 :(得分:3)
在Laravel 5中使用更新表单有几个选项。为了让我的视图更清晰,我更喜欢使用HTML/Form helper library from Laravel Collective。它已有详细记录,并提供开箱即用的form-model binding,它可以处理默认值,而无需将逻辑添加到视图中。只需通过Composer添加库(" laravelcollective / html":" 5.2。*")并将服务提供商和别名添加到config/app.php
。之前随Laravel 4一起提供的HTML帮助程序,但在Laravel 5发布时被移动到外部库。
如果您希望避免使用额外的库,this post in the Laracast forum会提供包含预填充字段的更新表单的完整示例。
答案 1 :(得分:2)
您应该使用表单模型绑定和部分
首先创建3个文件 - create.blade.php
,edit.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')
字段,它将由插件自动填充。
答案 2 :(得分:1)
通过表单和本地化,我在每个项目中都使用了3个包:
清洁,易于阅读和贡献。
答案 3 :(得分:0)
或者...而不是每次在视图中都有三元组,您可以只允许在编辑视图中使用的相同变量可用于创建视图,然后只将该变量分配给空实例该模型将允许该对象的每个属性具有空值。这将在控制器而不是视图中完成。
所以你可以这样做:
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)
格式为partial,其中$ user->名称为默认值,在创建视图中显示为空字符串,并在编辑视图中显示实际数据。