2

我正在尝试在我的数据库中编辑一行。我尝试加载包含以下内容的编辑表单,但我似乎收到错误消息:“缺少一些强制参数(“matches”)以生成路由“matches.update”的 URL。”

@extends('master')
    @section('content')
        <h1>Compare Ages</h1>   

        {{ Form::open(array('action' => 'MatchesController@update')) }}


            {{ Form::label('n1label', 'Person 1: ') }}
            {{ Form::text('name1', $match->name1) }}<br/>
            {{ Form::label('v1label', 'Age: ') }}
            {{ Form::text('val1', $match->val1) }}<br/><br/>

            {{ Form::label('n2label', 'Person 2: ') }}
            {{ Form::text('name2', $match->name2) }}<br/>
            {{ Form::label('v2label', 'Age: ') }}
            {{ Form::text('val2', $match->val2) }}<br/><br/>

        {{ Form::submit('Update Pair') }}

        {{ Form::close() }}

    @stop

这是我在控制器上用于编辑和更新方法的内容:

public function edit($id)
{
    print_r(Mydata::find($id));
    return View::make('matches.edit')

        ->with('title', 'Edit Match')
        ->with('match', Mydata::find($id));

}

public function update($id)
{

    $input = Mydata::where('id', Mydata::find($id));
    $new_input = array(
        'name1'=>Input::get('name1'),
        'val1'=>Input::get('val1'),
        'name2'=>Input::get('name2'),
        'val2'=>Input::get('val2')
        );
    $input->update($new_input);


    return Redirect::to('matches')
    ->with('message', 'Match updated successfully!');

}

请让我知道如何在匹配/编辑表单上加载内容并在使用路由匹配/更新编辑后保存,然后使用更新的数据重定向到匹配/$id

4

3 回答 3

3

我认为这与您需要 ID 的功能有关。我想您需要在表单公开调用中包含正在更新的项目的 ID。

我不确定你需要的语法,也许就像泰勒在这里提到的那样:https ://github.com/laravel/framework/issues/844#issuecomment-15996265

或者他们在这里说什么:Laravel 4:将什么作为参数传递给 Url 类?. (这当然适用于 URL 类,但我想它与 Form 类类似)

编辑:

好的,这是 Form 的 'getControllerAction' 函数的代码,如果你使用 'action' 参数,它会被 Form::open 调用。

/**
 * Get the action for an "action" option.
 *
 * @param  array|string  $options
 * @return string
 */
protected function getControllerAction($options)
{
    if (is_array($options))
    {
        return $this->url->action($options[0], array_slice($options, 1));
    }

    return $this->url->action($options);
}

所以看起来它只是为控制器操作获取传递数组的第一个元素,然后将其余元素用作选项。因此,您应该能够:

{{ Form::open(array('action' => 'MatchesController@update', 'id' => $match->id)) }}

祝你好运 :)

于 2013-06-10T09:36:18.020 回答
1

稍微调整一下:如果你改变

{{ Form::open(array('route' => array('matches.update', $match->id), 'method' => 'PUT')) }}

{{ Form::model($match, array('route' => array('matches.update', $match->id), 'method' => 'PUT')) }}

Laravel 将填充表单上的现有字段;为需要编辑的表单提供了很好的便利。注意使用Form::model传递参数$match

于 2013-09-03T15:31:16.440 回答
0

通过以这种方式更改我的代码,我能够查看表单、编辑、提交和更改数据库: 在 edit.blade.php 表单上:

{{ Form::open(array('route' => array('matches.update', $match->id), 'method' => 'PUT')) }}

在 MatchesController.php 控制器上:

public function update($id)
{
    $input = Mydata::find($id);
    $input->update(array(
        'name1'=>Input::get('name1'),
        'val1'=>Input::get('val1'),
        'name2'=>Input::get('name2'),
        'val2'=>Input::get('val2'),
        'updated_at'=>new DateTime
        ));
    $input->save();

    return Redirect::to('matches/'.$id)
    ->with('message', 'Match updated successfully!');

}

最后,如您所见,我可以重定向到显示视图。谢谢你,约翰!

于 2013-06-12T08:17:44.090 回答