在Laravel中添加额外属性(类)后,从"Form :: model"自动填充"Form :: text"

ste*_*ve 5 php laravel laravel-5 laravelcollective

我目前正在使用laravelcollective插件渲染和填充laravel 中的表单.这是按预期工作:

{!! Form::model($user, ['action' => 'user@updateUser']) !!}

<div class="form-group">
    {!! Form::label('user_name', 'Name') !!}
    {!! Form::text('user_name') !!}
</div>

<button class="btn btn-success" type="submit">Update</button>

{!! Form::close() !!}
Run Code Online (Sandbox Code Playgroud)

上面的代码生成表单并使用用户名填充输入字段.

如果我想将一个类属性添加到表单输入,如下所示:

{!! Form::text('user_name', '', ['class' => 'form-control']) !!}
Run Code Online (Sandbox Code Playgroud)

它没有填充输入值,因为理论上我已将默认值(第二个参数)设置为''.

有没有一种方法可以填充值并添加一个类而不显式地这样做:

{!! Form::text('user_name', $user->user_name, ['class' => 'form-control']) !!}
Run Code Online (Sandbox Code Playgroud)

通过这样做上述这违背了通过模型呈现形式的对象{!! Form::model($user, ['action' => 'user@updateUser']) !!},因为我可能也解析$user为一个变量到模板,我不想做的事.

Nik*_*aut 1

然后你可以使用空白null代替""

{!! Form::text('user_name', null , ['class' => 'form-control']) !!}
Run Code Online (Sandbox Code Playgroud)

您还可以使用old函数

{!! Form::text('user_name', $user->user_name or old('user_name'), ['class' => 'form-control']) !!}
Run Code Online (Sandbox Code Playgroud)

$user->user_name or old('user_name')可以表示为

如果$user->user_name存在,则输入值,$user->user_name否则检查第一次old input是否为""空,如果出现任何错误则重定向回来,则具有一些值。

或者简单地使用isset方法或在 php 7 中使用$user->user_name ?? ''

{!! Form::text('user_name', $user->user_name ?? '', ['class' => 'form-control']) !!}
Run Code Online (Sandbox Code Playgroud)