Laravel 4:从视图提交数据时未定义的变量错误

时间:2013-07-16 16:27:06

标签: php laravel laravel-4

我正在尝试构建一个计时器应用程序 - 这个表单应该提交时间(它确实)和从数据库填充的客户端名称,它看起来像这样:

{{ Form::open(array('action' => 'TasksController@store', 'name' => 'timer')) }}
    {{ Form::select('client', $client , Input::old('client')) }}
    {{ Form::hidden('duration', '', array('id' => 'val', 'name' => 'duration')) }}
    {{ Form::submit('Submit', array('class' => 'btn btn-primary')) }}
{{ Form::close() }}

生成此页面的控制器如下所示:

public function index()
{
    $client = DB::table('clients')->orderBy('name', 'asc')->lists('name','id');
    return View::make('tasks.index', compact('task', 'client'));
}

我得到一个"未定义的变量:client"当我提交表格时。我不明白为什么。

我做错了什么?

编辑:我的TasksController中的商店功能如下所示:

public function store()
{
    $input = Input::all();  
    $v = Validator::make($input, Task::$rules);
    if($v->passes())
    {
        $this->task->create($input);
        return View::make('tasks.index');
    }
    return View::make('tasks.index')
        ->withInput()
        ->withErrors($v)
        ->with('message', 'There were validation errors.');
}

1 个答案:

答案 0 :(得分:2)

您将从View::make()函数返回store(),这不是“足智多谋”的方式。

您的观点期望包含$client - 但由于store()未返回$client,因此会生成错误。

假设您使用的是资源丰富的控制器 - 您的商店功能应如下所示:

public function store()
{
    $input = Input::all();  
    $v = Validator::make($input, Task::$rules);
    if($v->passes())
    {
        $this->task->create($input);
        return Redirect::route('tasks.index');  // Let the index() function handle the view generation
    }
    return Redirect::back()  // Return back to where you came from and let that method handle the view generation
        ->withInput()
        ->withErrors($v)
        ->with('message', 'There were validation errors.');
}