【问题标题】:Method not allowed - Laravel 4不允许的方法 - Laravel 4
【发布时间】:2015-05-06 12:59:39
【问题描述】:

我正在开发 Laravel 4 应用程序,并将其部署在免费主机上。问题是我的 POST 路由在那里不起作用,并且由于“方法不允许”异常而崩溃。相同的路线在我的本地机器上完美运行。请给我一些关于这里可能发生的事情的笑话?

更新:

这就是我所说的路线:

$.ajax({
                    method: "POST",
                    url: "/store/addToCart/" + phone.id(),
                    contentType: "application/json; charset=utf-8"
                }).done(function(returnedData) {
                    window.location = "/";
            });

这是我的路线:

Route::post('/store/addToCart/{id}', 'CartProductController@addToCart');

这是我的控制器:

public function addToCart($productId) {

    $product = Product::where('id', '=', $productId)->first();
    //Session::flush();


    if( null !== Session::get('cart') ) {


        $cartId = Session::get('cart');
        $products_count = Session::get('products_amount')[0];
        $amount = Session::get('amount')[0];

            $cartProduct = CartProduct::create(['cart_id' => $cartId[0],
                                                'product_id' => $productId,
                                                'product_cost' => $product->price_bgn,
                                                'product_qty' => 1
                                                ]);

            if( isset($cartProduct) ){
                $products_count++;
                $amount += $product->price_bgn;
            }
            Session::push('cart', $cartId);
            Session::forget('products_amount');
            Session::push('products_amount', $products_count);

            Session::forget('amount');
            Session::push('amount', $amount);
    } else {

        $products_count = 0;
        $amount = 0;
        $cart = Cart::create(['status' => 'НОВА',
                               'cost' => $product->price_bgn
                            ]);

        $cartProduct = CartProduct::create(['cart_id' => $cart->id,
                                            'product_id' => $productId,
                                            'product_cost' => $product->price_bgn,
                                            'product_qty' => 1
                                            ]);

        if( isset($cartProduct) ) {
            $products_count++;
            $amount = $product->price_bgn;
        }
        Session::push('cart', $cart->id);
        Session::forget('products_amount');
        Session::push('products_amount', $products_count);

        Session::forget('amount');
        Session::push('amount', $amount);
    }       
}

这在我的本地机器上工作,但在我的主机上它崩溃了“方法不允许”。

【问题讨论】:

  • 请向我们提供您在应用程序中使用的代码。我们不能只提供通配符解决方案,这不是 StackOverflow 的用途。向我们展示您的路线文件,并向我们展示使用的控制器/方法。
  • 你是否使用与get相同的路由?如果是这样,请尝试使用 Route::post('/store/addToCart/{id}', [ 'as' => 'addToCart.post', 'uses' => 'CartProductController@addToCart' ]);Route::get('/store/addToCart/{id}', [ 'as' => 'addToCart.get', 'uses' => 'CartProductController@addToCart' ]); 的路线
  • 不,我没有使用与 get 相同的路线,但添加了您的代码,它工作正常。不明白为什么,但工作。谢谢:)
  • @stackUnderflow 请接受我的回答

标签: laravel web-hosting


【解决方案1】:

如果同一条路线有两条路线,则需要为它们命名。控制器和方法无关紧要,它们可以不同也可以相同。

Route::post('/store/addToCart/{id}', [ 'as' => 'addToCart.post', 'uses' => 'YourController@postMethod' ]);
Route::get('/store/addToCart/{id}', [ 'as' => 'addToCart.get', 'uses' => 'YourController@editMethod' ]);

【讨论】:

  • 这似乎不对...您不应该必须为GETPOST 以不同的方式命名路由。如果GET 有两条路由,那么是的,您必须为它们命名,但不能用于不同的服务器方法。奇数。
  • 是的,这不正确。我只是设置了两条相同的路线,一条获取,一条发布,我能够在不命名的情况下到达两条路线。此外,stackUnderflow 提到他没有此 uri 的 get 路由,因此他只有一个 post 路由。我的猜测是他使用的是旧版本的 jquery,其中 ajax 方法没有 method 选项,只是默认为 get 所以他真的只需要让他的 post 路由 get 代替或更新 jquery 到某物 >= 1.9。
猜你喜欢
  • 2017-11-28
  • 2020-07-25
  • 2018-07-16
  • 2018-12-15
  • 2017-05-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多