【问题标题】:Very Confusing MethodNotAllowedHttpException on a put request laravel放置请求 laravel 上非常令人困惑的 MethodNotAllowedHttpException
【发布时间】:2017-02-28 11:03:19
【问题描述】:

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

一直在关注有关 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.

【问题讨论】:

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


    【解决方案1】:

    似乎在整理路线后,问题变成了大写错误。 $user->id 应该是 $user->ID。

    【讨论】:

      【解决方案2】:

      我认为你在表单中使用模型。试试这个

       {{ 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');
      

      【讨论】:

      • 是的,laravel 有表单模型绑定,我用它来预填充数据。
      • @show route resource list .you get using php artisan routes
      • 感谢您的帮助!但我不太了解 put users/{user} 是如何不使用 id 的,因为只是为了进入表单进行编辑需要在 edit users/{user}/edit 中使用相同的路由,这是分配用户的ID。或者你的意思是put命令本身不能带id?
      • 好的测试。结果相同。我认为我的控制器代码可能有问题?
      【解决方案3】:

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

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

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

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

      所以你需要两种方法

      获取 -> 查看
      put -> 提交更新

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

      【讨论】:

      • 我尝试手动设置通常由资源路由生成的路由并将其关闭。仍然遇到同样的问题。第一篇文章已更新以反映这一点。
      猜你喜欢
      • 2020-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-06
      • 1970-01-01
      • 2022-01-21
      • 2022-01-17
      相关资源
      最近更新 更多