【问题标题】:Laravel: Form model binding to inputs with optionsLaravel:表单模型绑定到带有选项的输入
【发布时间】:2014-07-27 06:36:26
【问题描述】:

我使用 laravel 的表单模型绑定创建了一个表单。

在表单中,我创建了显示模型信息所需的表单字段。当写出最小结构时,一切都很好:

{{ Form::model( $user, array('route' => array('users.update', $user->id), 'method' => 'put' )) }}

    {{ Form::label('first_name', "First Name")}}
    {{ Form::text('first_name')}}
...

这样设置,当页面加载时,我的模型中的 first_name 值会自动填充,就像我期望/想要的那样。

当我尝试为文本输入指定选项时,问题就出现了。我正在使用引导程序,所以我想添加一个 form-control 类,我还想在输入字段中添加一个占位符。为此,我像这样定义了我的文本输入:

{{ Form::text('first_name',  array('placeholder' => "e.g. Zoe", 'class' => 'form-control'))}} 

请注意,文本值的第二个参数为空。这是因为我希望模型绑定可以输入它,而不必添加 $user->first_name 这样的内容,因为那么模型绑定的意义何在?

如果我这样离开,我会收到一个错误,因为 Form::text() expects a string for the value,但如果我通过输入以下内容来修复它:

{{ Form::text('first_name', '',  array('placeholder' => "e.g. Zoe", 'class' => 'form-control'))}}

然后我得到一个空白值,因为我给它一个空白字符串。

有没有一种方法可以在 laravel 中使用表单模型绑定来填充值并仍然为我的占位符和类定义传递选项数组?

【问题讨论】:

    标签: php forms twitter-bootstrap laravel-4


    【解决方案1】:

    您只需将Input::old() 放在那里:

    {{ Form::text('first_name', Input::old('first_name'),  array('placeholder' => "e.g. Zoe", 'class' => 'form-control'))}}
    

    那么会发生什么:

    1. Laravel 查找任何旧输入,它将用作第一个选项(如果出现验证错误,则使用输入数据重新填充表单。

    2. 如果没有找到旧的输入,它将恢复到模态数据

    【讨论】:

    • 就我而言,我不想显示旧的输入值。所以我只是用 null 替换了 Input::old() 。它有效..
    • 在 Laravel 5 中,$user->first_name 的行为与默认值 Input::old('first_name') 完全相同。那有什么意义呢?但是,当我必须自己设置默认值时,表单模型绑定并不能节省我的工作量。
    猜你喜欢
    • 1970-01-01
    • 2014-07-22
    • 1970-01-01
    • 2018-06-30
    • 2019-02-24
    • 2013-05-28
    • 2023-04-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多