2013-03-24 21 views
2

我正在使用Laravel 4及其内置窗体组件。我试图设置它,以便我可以给出一组默认值,但是如果用户提交并且验证器失败,它将使用上一个输入的值。但是,下面的代码总是失败。由于某种原因,会话值“threw_error”始终为真,即使表单发生错误。设置默认值并使用Laravel 4窗体的错误输入?

似乎所有事情都是在会话中完成的,这就是为什么我要设置__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') }} 

编辑:此代码按预期工作,或多或少,虽然会议:: flashInput($细节)比手动调用__old_input更好。我尝试删除表单中的一些字段,看看它是否在那里,这实际上工作。换句话说,我认为这是一个问题,无论是我的PHP本地版本,还是某个配置或某个问题 - 而不是Laravel问题。

回答

7

由于Laravel 4,你可以做的,而不是Form::model($model, array)Form::open(array)

那么你不必值传递给表单辅助方法。它会从模型中获得价值,但首先,它会检查是否有oldInput,所以价值将是旧的。

看看这个method。这是一个小的变化,但真正聪明的一个:)

但对于这个工作,你必须重新导回与输入

Redirect::back()->withInput(); 

像这样:

​​

PS,而不是使用您可以使用Input::old()