Laravel 4 - 显示带有旧数据输入以及数据库信息的编辑表单
Posted
技术标签:
【中文标题】Laravel 4 - 显示带有旧数据输入以及数据库信息的编辑表单【英文标题】:Laravel 4 - Showing edit form with OLD data input as well as DB information 【发布时间】:2014-07-08 21:28:17 【问题描述】:我正在为我的应用程序制作一个编辑表单,我想知道是否有人可以告诉我如何将数据库中的数据获取到我的文本字段中。
我可以根据用户的点击找到我需要编辑的记录,如果我执行以下操作,我可以显示信息:
value=" $letter->subject "
但是,我遇到的问题是,当我通过验证运行它并且出现错误时,它会返回数据库信息而不是旧数据。
所以我的问题是。有没有办法先提供数据库信息,然后当它通过验证器时,验证用户编辑的信息?
目前用于验证文本字段并将数据带回以防出错,我正在使用
Input::old('subject')
是否有那个旧位的参数可以让我放入数据库数据?
干杯,
【问题讨论】:
BigJobbies - 我可以建议你访问 Laracasts.com - 这是一项付费服务,但有很棒的 Laravel 入门教程,其中涵盖了你的许多基本问题。它是迄今为止最好的 Laravel 培训资源。 附注答案是您需要在验证失败时在返回时使用 ->withInput() - 以允许使用旧输入而不是 DB 填充表单。 谢谢你...我会检查一下 其实它也有很多免费指南 - laracasts.com/tags/free 【参考方案1】:你可以验证并返回 ->withInput() 然后在你的实际表单中,检查是否有 Input::old() 并显示它,否则从数据库中显示。
示例:
<input type="text" name="subject"
value=" (Input::old('subject')) ? Input::old('subject') : $letter->subject ">
或者你可以用另一种方式定义变量并执行常规 if 语句,而不是三元语句!由您决定要使用什么!
【讨论】:
非 Laravel 表单的魅力 任何专家可以告诉我这种输入的价值:<input type="number" min="0" name="services[$service->id][price_15]"class="form-control">
?这是来自 DB 的每个服务的循环。【参考方案2】:
你只需要表单模型绑定http://laravel.com/docs/html#form-model-binding:
Form::model($letter, ['route' => ['letters.update', $letter->id], 'method' => 'put'])
// your fields like:
Form::text('someName', null, ['class' => 'someHTMLclass' ...])
// no default values like Input::old or $letter->something!
Form::close()
通过这种方式,您的表单将由 $letter 数据填充(例如,从控制器传递)。
现在,如果你有你的计数器:
// in case of invalid data
return Redirect::back()->withInput();
然后在重定向时,您的表单将首先重新填充输入值,而不是原始模型数据。
【讨论】:
很棒的解决方案 ;)【参考方案3】:让它更简单干净
<input type="text" name="subject" value=" (Input::old('subject')) ?: $letter->subject ">
【讨论】:
【参考方案4】:我不确定 Laravel 4 但在 Laravel 5 中,函数 old 采用第二个参数,如果会话中没有旧数据,则为默认值。
请查看此答案Best practice to show old value
【讨论】:
以上是关于Laravel 4 - 显示带有旧数据输入以及数据库信息的编辑表单的主要内容,如果未能解决你的问题,请参考以下文章