laravel无法更新数据库并获取错误MethodNotAllowedHttpException

时间:2016-08-31 15:38:09

标签: laravel error-handling sql-update

我使用laravel框架make方法和函数来更新数据库中的行,但是发现错误 MethodNotAllowedHttpException 并且我尝试处理它,但仍然可以&#t; t 这里的格式为 edit.blade.php

        {{ Form::model($datas, array('route' => array('barang.update' , $datas->id) , 'method'=> 'PATCH') )}}
          <div class="box-body">
            <div class="form-group">
            {{ Form::label('Nama Barang', 'Nama Barang :') }}
            {{ Form::text('nama_barang',null,['class'=>'form-control']) }}

            </div>
            <div class="form-group">
              {{ Form::label('Harga Barang', 'Harga Barang :') }}
              <div class="input-group">
                <span class="input-group-addon">Rp</span>
                {{ Form::text('harga_barang',null,['class'=>'form-control']) }}
                <span class="input-group-addon">.00</span>
              </div>
            </div>

            <div class="form-group">
              {{ Form::label('Jumlah Barang', 'Jumlah Barang :') }}
              <div class="input-group">
                {{ Form::text('jumlah',null,['class'=>'form-control']) }}
                <span class="input-group-addon">Item</span>
              </div>
            </div>

            <div class="form-group">
              <label for="exampleInputFile">Foto Barang</label>
              <input type="file" id="exampleInputFile">

              <!-- <p class="help-block">Example block-level help text here.</p> -->
            </div>
          </div>
          <!-- /.box-body -->

          <div class="box-footer">
            {{ Form::submit('Simpan', ['class' => 'btn btn-primary']) }}
            <button type="submit" class="btn btn-success">Simpan dan Publikasi</button>
            <button type="submit" class="btn btn-default">Batal</button>
          </div>
        {{ Form::close() }}

这里是Controller BarangContr.php

public function edit($id)
    {
        $datas = BarangModel::find($id);
        return View::make('admin/barang/edit', compact('datas'));
    }

    public function update($id)
    {

        $datas = new BarangModel;
        $datas -> nama_barang  = Input::get('nama_barang');
        $datas -> harga_barang = Input::get('harga_barang');
        $datas -> jumlah       = Input::get('jumlah');
       $barang = BarangModel::find($id);
       $barang->update($datas);

       return $this->index();
    }

此处的路线代码 route.php

Route::resource('barang', 'BarangContr');
Route::get('/barang/edit/{id}', 'BarangContr@edit');
Route::post('/barang/update/{id}', array('as' => 'barang.update' , 'uses' => 'BarangContr@update'));

这里是BarangModel.php代码:

<?php

use Illuminate\Database\Eloquent\Model;

class BarangModel extends Model 
{
    protected $table = 'tb_barang';
    protected $primarykey = 'id';
    protected $fillable = ['kode_barang', 'nama_barang', 'harga_barang', 'jumlah'];
}

先谢谢你的答案:)

2 个答案:

答案 0 :(得分:0)

您的路线适用于方法method="PATCH"时,您已将POST放入表单中。 HTML5表单只接受GETPOST方法。请删除method属性再次尝试(因此返回POST默认值。)

顺便说一下,Laravel可以使用隐藏输入来使用其他路线方法:https://laravel.com/docs/5.3/routing#form-method-spoofing

答案 1 :(得分:0)

由于您正在使用补丁,我建议将您的路线更改为以下

Route::post('/barang/update/{id}', array('as' => 'barang.update' , 'uses' => 'BarangContr@update'));

Route::patch('/barang/update/{id}', array('as' => 'barang.update' , 'uses' => 'BarangContr@update'));

此外,您应该将控制器更改为以下内容:

    $datas = BarangModel::find($id);
    $datas->nama_barang  = Input::get('nama_barang');
    $datas->harga_barang = Input::get('harga_barang');
    $datas->jumlah       = Input::get('jumlah');
    $datas->save();

   return $this->index();