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 学习交流 QQ 群:375462817 本文档前言Laravel 文档写的很好,只是新手看起来会有...
    Leonzai阅读 12,668评论 2 12
  • 一. 说明 以下内容大部分引用Laravel China社区的文章 - 分享下团队的开发规范 ——《Laravel...
    knghlp508阅读 12,362评论 0 28
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,825评论 1 32
  • 年轻人最迷茫的就是不知道自己这一生应该做些什么。是的,我就是这些年轻人其中的一个,我很迷茫,非常迷茫。 有些人很幸...
    深水里的星星阅读 1,930评论 1 1
  • 这两天都在准备创业营及青年大会需要的服装,许久没来逛商场,有些店面都已经不再是原来的样子,经过装修后更加舒适、美观...
    王金凤_自我管理顾问阅读 3,991评论 1 0