2015-05-06 101 views
0

我正在开发Laravel 4应用程序,并将其部署在免费托管。问题是我的POST路由不在那里工作,他们崩溃与“方法不允许”异常。相同的路线在我的本地机器上完美地工作。请给我一些关于这里可能发生的事情的小丑吗?方法不允许 - Laravel 4

UPDATE:

这是我所说的路线:

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

这是我的路线:

Route::post('/store/addToCart/{id}', '[email protected]'); 

这是我的控制器:

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); 
    }  
} 

这正在为我的当地妈妈工作中国香港,但在我的托管它崩溃与“方法不允许”。

+0

请向我们提供您在应用程序中使用的代码。我们不能只给出通配符解决方案,这不是StackOverflow的用途。向我们显示您的路线文件,并向我们展示所使用的控制器/方法。 –

+0

更新了我的帖子 – stackUnderflow

+0

您使用的是同一条路线吗?如果是这样的路线'Route :: post('/ store/addToCart/{id}',[ 'as'=>'addToCart.post', 'uses'=>'CartProductController @ addToCart' ] );''和'Route :: get('/ store/addToCart/{id}','=>'addToCart.get', 'uses'=>'CartProductController @ addToCart' ]);'' –

回答

2

如果你有两条相同路线的路线,你需要命名它们。控制器和方法并不重要,它们可以是不同的或相同的。

Route::post('/store/addToCart/{id}', [ 'as' => 'addToCart.post', 'uses' => '[email protected]' ]); 
Route::get('/store/addToCart/{id}', [ 'as' => 'addToCart.get', 'uses' => '[email protected]' ]); 
+0

这看起来不正确......你*不应该*为'GET'和'POST'命名不同的路由。如果你有两条'GET'路由,那么你必须为它们命名,但不适用于不同的服务器方法。奇。 –

+0

是的,这是不正确的。我只是设置了两条相同的路线,一条获得一条信息,而且我能够在没有命名的情况下击中两条路线。此外,stackUnderflow提到他没有这个uri的'get'路由,所以他只有一条路径。我的猜测是他使用的是旧版本的jquery,其中ajax方法没有'method'选项,只是默认为'get',所以他真的只需要让'post'路由'get'来代替或者将jquery更新为东西> = 1.9。 – user3158900