【问题标题】:MethodNotAllowedHttpException in laravel 5 when calling POST调用POST时laravel 5中的MethodNotAllowedHttpException
【发布时间】:2016-05-23 08:16:06
【问题描述】:

我是 Laravel 的新手,我正在尝试更新我的用户表中的记录,但我得到了这个 MethodNotAllowedHttpException,我已经尝试了所有方法,但没有任何效果。

用户控制器:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Http\Requests;
use App\Http\Controllers\Controller;
use App\Users;

class UsersController extends Controller
{
    public function index()
    {
        $users = Users::all();
        return view('admin.users',compact('users'));
    }

    public function block(Request $request)
    {
        $user = Users::find($request->id);
        $user->blocked = 1;
        $user->save();

        return redirect()->action('UsersController@index'); 
    }
}

路由.php

Route::get('/admin/users', 'UsersController@index');
Route::post('/admin/users/block',  'UsersController@block');

直到$user->blocked = 1;一切都好。

更新 我正在通过这个 jQuery 方法访问控制器

$("#valdiate-user-block").click(function(){
    var data = {
        id: 2
    }
    $.ajax({
        url: "block",
        type:"POST",
        data: data,
        success:function(data){
            alert(data);
        },error:function(){ 
            alert("error!!!!");
        }
    }); //end of ajax
    });

我没有提到它,因为我本地化了错误,当我从根访问控制器时,我得到了错误,当我从 jQuery 访问它时,我得到了

POST http://localhost:1303/admin/users/block 500 (Internal Server Error)

请帮帮我,我累了!!

【问题讨论】:

  • 遇到异常时您访问的 URL 是什么?以及如何访问该 URL?
  • 能否请您出示一个发送请求的表格?
  • 我是从 ajax 请求访问控制器,我没有提到它,因为我手动尝试了它来本地化错误,我会添加它
  • 通常MethodNotAllowedHttpException 表示 CORS 错误,但您的浏览器也会返回 500 个错误(这真的很烦人)。您确定您的 ajax 请求正在触发 block 方法吗?就像您注释掉该函数中的所有代码并仅返回字符串“test”一样,您的 ajax 函数是否会在其数据中返回“test”一词,还是仍然有错误?
  • @AndyNoelker 所有代码都在那里,ajax 功能很好。当我在 '$user->blocked = 1;' 之后添加 'dd($user->toArray())'我得到了一个结果,我需要的所有数据都很好,但是当它尝试保存它时,我得到 500 错误

标签: php laravel post laravel-5 put


【解决方案1】:

我修好了:)

我添加了public $timestamps = false; 在用户类中

我从 ajax 调用中删除了类型

$.ajax({
url: "users/block/",
data: data,
success:function(data){
alert(data);
},error:function(){ 
alert("error!!!!");
}

感谢您的帮助:)

【讨论】:

  • 如果时间戳导致您的问题,那么您不应该这样做Route::any。您的代码现在只是执行 GET 更新请求,这确实不是很好,这也意味着 /admin/users/block 路由不能做任何其他事情。您应该可以将public $timestamps = false; 添加到您的模型中,仅此而已。
【解决方案2】:

如果你想更新你必须使用PATCH 考虑在你的方法中

public function block(User $user, Request $request)
    {
        $input = $request->all();
        $input['blocked'] = 1;
        $user->update($input);

        return redirect()->action('UsersController@index'); 
    }

如果你想使用POST,那么就这样做

public function block(Request $request)
        {
            $input = $request->all();
            $input['blocked'] = 1;
            User::create( $input );
            return redirect()->action('UsersController@index'); 
        }

【讨论】:

  • 我想更新用户记录,所以我不能添加 do create 我想!
【解决方案3】:

而不是使用以下两行:

use Illuminate\Http\Request;
use App\Http\Requests; // seems this one also incorrect to me (Requests?)(Request !)

只需在下面使用并检查:

use Request;

您的更新代码将是:

    namespace App\Http\Controllers;
    use Request;
    use App\Http\Controllers\Controller;
    use App\Users;
    use Illuminate\Support\Facades\Input;

    class UsersController extends Controller
    {
        public function index(){
            $users = Users::all();
            return view('admin.users',compact('users'));
        }

        public function block(){

            $inputData = Input::all(); // Reads all input array
            $your_id=   $inputData['id'];
            $user->blocked = 1;
            $user->save();

            return redirect()->action('UsersController@index');

        }
    }

【讨论】:

  • 我得到了同样的结果
  • 为什么要使用这个(请求$request),首先删除这个并尝试这一行 $inputData = Input::all(); // 读取所有输入数组
  • @VijaySaiChaudary 当请求的 HTTP 动词(GET、POST、PUT 等)和 URL 路径与路由定义不匹配时,会抛出 MethodNotAllowedHttpException。它与Request 类的命名空间或用法无关。
猜你喜欢
  • 2015-09-11
  • 2015-08-30
  • 1970-01-01
  • 2016-11-24
  • 2016-05-27
  • 1970-01-01
  • 2017-02-20
  • 2016-03-26
  • 2017-09-21
相关资源
最近更新 更多