laravel day 5 section 3: edit and update

大背景知识,这里可以是认为的比较重要的部分。
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')) !!}

你可能感兴趣的:(laravel day 5 section 3: edit and update)