我正在使用 Laravel 4 及其内置的表单组件。我正在尝试设置它,以便我可以为表单提供一组默认值,但如果用户提交并且验证器失败,它将使用先前输入中的值。然而,下面的代码总是失败。出于某种原因,会话值“threw_error”始终为真,即使表单抛出错误也是如此。
似乎一切都是通过会话完成的,这就是我设置 __old_input 的原因,它是表单使用的内部键。我究竟做错了什么?我应该像这样使用 __old_input,还是有更好的方法来实现这个目标?
我正在使用资源丰富的控制器,所以下面的 index() 是 GET /,而 store() 是 POST /。
class Admin_DetailsController extends Admin_BaseController
{
public function index()
{
$details = Detail::all();
// this is always true for some reason?
if(!Session::get('threw_error', false))
{
Session::put('__old_input', $details);
}
$data['message'] = Session::get('message');
$this->layout->nest('content', 'admin.details.index', $data);
}
public function store()
{
$validator = $this->makeValidator();
if($validator->fails())
{
return Redirect::to('/admin/details')->withErrors($validator)->withInput()->with('threw_error', 1);
}
// process normally
}
}
// in view
{{ Form::text('some_field') }}
编辑:尽管 Session::flashInput($details) 比手动调用 __old_input 更好,但此代码或多或少按预期工作。我尝试删除表单中的一些字段以查看它是否存在,这确实有效。换句话说,我认为这是我本地版本的 PHP 或某些配置或其他东西的问题 - 而不是 Laravel 问题。