在put请求laravel上非常混乱MethodNotAllowedHttpException

时间:2016-10-19 01:35:35

标签: php forms laravel-5 put laravel-blade

到目前为止,所有修改路由方法的尝试都失败了。

一直在关注laravel restful控制器的一些文档,并设置了一个基本编辑和向数据库添加项目的设置。它一直顺利,直到我遇到障碍......我不确定究竟是什么引发了这个问题,但基本上,一切正常,直到我点击提交表格然后它的游戏结束。

通常情况下我可以通过检查我是否使用正确的电话,或者拼写错误或其他东西来诊断这一点。但这对我来说是一个新的要求,所以我无法调试问题的来源。

这是那些知道要寻找什么的错误。完整here

MethodNotAllowedHttpException in RouteCollection.php line 218:

我的路线是pasted here。 路线is here的打印输出:

控制器:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests\ContactFormRequest;
use App\UserEdit;
use DB;
use App\Http\Requests;

class EditUserController extends Controller
{

    public function index()
    {
        $array = UserEdit::all()->toArray();
        return view('UserEntry', compact('array'));
    }


    public function create()
    {
        $id = UserEdit::find(715)->toArray();
        return view('NewUser', compact('id'));
    }


    public function store(UserFormRequest $request)
    {
        //$user = new UserEdit([
        //    'name'=>$request->get('First_Name'),
        //    'email'=>$request->get('email'),
        //    'username'=>$request->get('name')
        //]);
        //
        //$user->save();
        //return \Redirect::route('users')->with('message', 'Nice Work.');
    }


    public function show($id)
    {
        try {
         $array = UserEdit::findorFail($id)->toArray();
         return view('UserEdit')->with('array', $array);

         } catch(\Exception $e) {
             return \Redirect::route('users.index')
                ->withMessage('This user does not exist');
         }

    }


    public function edit($id)
    {
        $user = UserEdit::findorFail($id);
        return view('EditUser')->with('user',$user);
    }


    public function update($id, UserFormRequest $request)
    {
       $user = UserEdit::findorFail($id);

       $user->update([
           'name' => $request->get('name'),
           'email' => $request->get('email')
       ]);

       return \Redirect::route('users.edit', [$user->id])->with('message', 'Details Updated!');
    }


    public function destroy($id)
    {
        //
    }
}

刀锋is here

3 个答案:

答案 0 :(得分:1)

我认为你正在使用form.try这个

 {{ Form::open(['method' => 'put',  'route'=>['users.update', $user->id], 'class'=>'form']) }}

根据您的路由列表和路由,不会使用id,因此您会找到找不到方法的异常

PUT users/{user}    App\Http\Controllers\EditUserController@update

而不是使用资源只需为每个方法键入每个路径

Route::put('users/{user}', 'EditUserController @update');

答案 1 :(得分:1)

如果您很难找到解决方案,那么最简单的解决方案就是使用

Route::any('users/{user}', 'UserEntryController@update');

这允许您使用任何方法类型访问此操作 OR

Route::match(array('get', 'put'), 'users/{user}', 'UserEntryController@update');

所以你需要2个方法,它们是

得到 - &gt;查看
put - &gt;提交更新

您可以在此操作中指明您希望使用哪种方法类型

答案 2 :(得分:0)

似乎在整理出路线之后,这个问题就变成了糟糕的大写。 $ user-&gt; id应为$ user-&gt; ID。