我正在尝试编辑数据库中的一行。我尝试加载编辑表单及其中的内容,如下所示,但我似乎得到一个错误:“缺少一些必需参数(”匹配“)以生成路由”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和更新的数据
答案 0 :(得分:3)
我认为这与您需要ID的功能有关。我想你需要在表格公开电话中加入正在更新的项目的ID。
我不确定你需要的语法,也许就像泰勒在这里提到的那样:https://github.com/laravel/framework/issues/844#issuecomment-15996265
或他们在这里说的话:Laravel 4: What to pass as parameters to the Url class?。 (这当然是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)) }}
祝你好运:)
答案 1 :(得分: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 。
答案 2 :(得分: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!');
}
最后,正如您所看到的,我可以重定向到节目视图。谢谢你,约翰!