2015-05-06 166 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