大背景知识,这里可以是认为的比较重要的部分。
laravel 不支持直接put来修改form
============================ 报错的原因与解决 ==========================
step 1 思路
我们先从数据库里面把数据获取,然后将数据放进写好的表格里面,在表格俩面修改好,最后提交
step 2:
写一个放获取数据的表格
{!! Form::open(array('action' => ['todolistController@update', $todo->id] , 'method' => 'POST')) !!}
{{ Form::bsText('text', $todo->text)}}
{{ Form::bsTextArea('body', $todo->body)}}
{{ Form::bsText('due', $todo->due)}}
{{ Form::hidden("_method", 'PUT')}}
{{ Form::bsSubmit('update', ['class'=>'btn btn-primary']) }}
{!! Form::close() !!}
这里需要注意,像我之前所说的,laravel是不支持put的,所以我们要一个hidden component老完成这个update
修改provider
public function boot()
{
Form::component('bsText', 'components.form.text', ['name', 'value' => null, 'attributes' => []]);
Form::component('bsTextArea', 'components.form.textarea', ['name', 'value' => null, 'attributes' => []]);
Form::component('bsSubmit', 'components.form.submit', ['value' => 'Submit', 'attributes' => []]);
Form::component('hidden', 'component.form.hidden', ['name', 'value' => null, 'attributes' => []]);
}
在component form里面写一个专门提交的form
{{Form::hidden($name, $value, $attributes)}}
这样就可以啦
step 2 获取数据并且卸乳表格
这步应该是由controller来完成的
public function edit($id)
{
$todo = todo::find($id);
return view('todos.edit')->with('todo', $todo);
}
step 3 根据修改的数据并且提交
public function update(Request $request, $id)
{
$todo = todo::find($id);
$todo->text = $request->input('text');
$todo->body = $request->input('body');
$todo->due = $request->input('due');
$todo->save();
return redirect('/')->with("success", 'update successfully');
}
这样update的部分也就已经完成了
============================ 报错的原因与解决 ==========================
报错: Creating default object from empty value
原因:我把表格里面的obj也写在了string里面
{!! Form::open(array('action' => ['todolistController@update', '$todo->id'] , 'method' => 'POST')) !!}
解决:
实际上应该是这样的
{!! Form::open(array('action' => ['todolistController@update', $todo->id] , 'method' => 'POST')) !!}