1
votes

I have a form request to update the data in database.

My Controller

public function edit($id)
    {
        //
        $pinjaman = Pinjaman_Tanker::where('no_admin', $id)->firstOrFail();

        return view('pinjaman.edit')->with('pinjaman', $pinjaman);
    }

    public function update(Request $request, $id)
    {
        //

        $pinjaman = Pinjaman_Tanker::where('no_admin', $id)->firstOrFail();
        $validation = Validator::make($request->all(),[
            "tgl_input_pinjam" => "required|date",
            "no_anggota" => "required",
            "jumlah" => "required",
            "kebutuhan" => "string|required",
            "angsuran" => "required",
            "termin" => "required"
        ]);

        if ($validation->fails()){
            return redirect()->back()->withErrors($validation->errors())->withInput();
        }
        $pinjaman -> tgl_input_pinjam = date('Y-m-d', strtotime($request->get('tgl_input_pinjam')));
        $pinjaman -> kebutuhan = $request -> get('kebutuhan');
        $pinjaman -> jumlah = preg_replace('/(?:[.]|\,00)/', '$1', $request->get('jumlah'));
        $pinjaman -> angsuran = preg_replace('/(?:[.]|\,00)/', '$1', $request->get('angsuran'));
        $pinjaman -> termin = $request -> get('termin');
        $pinjaman -> save();

        return redirect(url('pinjaman'));

    }

Route

Route::get('pinjaman/{no_admin}/edit', 'Pinjaman\PinjamanController_Tanker@edit');
Route::put('pinjaman/{no_admin}', 'Pinjaman\PinjamanController_Tanker@update');

The view

<form id="edit_pinjaman" method="post" action="{{url('pinjaman/'.$pinjaman->no_admin.'')}}" enctype="multipart/form-data">
<input type="hidden" name="_method" value="put">
<input type="hidden" name="_token" value="{{ csrf_token() }}">

After I hit submit button, it didn't redirect to 'pinjaman' but show the form back with this error:

MethodNotAllowedHttpException in RouteCollection.php line 207:

in RouteCollection.php line 207

at RouteCollection->methodNotAllowed(array('PUT')) in RouteCollection.php line 194

at RouteCollection->getRouteForMethods(object(Request), array('PUT')) in RouteCollection.php line 142

at RouteCollection->match(object(Request)) in Router.php line 729

at Router->findRoute(object(Request)) in Router.php line 652

at Router->dispatchToRoute(object(Request)) in Router.php line 628

at Router->dispatch(object(Request)) in Kernel.php line 214

and so on

I already followed the guide in laravel 5.0 official documentation and do some research on internet. But this error keeps happening.

How i solve this?

Thank you

1
redirect()->back() issue. WIthin If condition, there is redirect()->back() that create issue because there is no"GET" request route created. and "redirect()->back() function call GET request. - GhanuBha

1 Answers

0
votes

Change your route to:

Route::post('pinjaman/{no_admin}/{id?}', 'Pinjaman\PinjamanController_Tanker@update');

Because your form method is POST

<form id="edit_pinjaman" method="post"

So, your old route is only accept PUT method, that why show error "methodnotallowedhttpexception"

In orther case:

If you still want to use PUT method in Route, just simple change form attribute method = "PUT".

Route::put('pinjaman/{no_admin}/{id?}', 'Pinjaman\PinjamanController_Tanker@update');

<form id="edit_pinjaman" method="PUT"