Laravel 4路线走错路线

时间:2013-12-22 13:21:36

标签: php laravel laravel-4

我已为资源设置路由并为同一控制器添加了其他路由。我已经有了这条路线,并且没有想到我已经改变了什么,但现在它已经在控制器中路由到了错误的方法。

我已经意识到这些路线的先进先出原则,并且此时已经设置好了:

Route::post('products/addItemToCart', array('uses' => 'ProductsController@addItemToCart'));
Route::post('products/editItemInCart', array('uses' => 'ProductsController@editItemInCart'));
//Product Related Routes
Route::get('products/saletotal/{id}', function ($id) {
        return Product::groupedSales($id);
    });

Route::get('products/itemValue/{id}', array('uses' => 'ProductsController@itemValue'));
Route::get('products/cartitem/{id}', array('uses' => 'ProductsController@getCartItem'));

Route::resource('products', 'ProductsController');

我有一个表格,由于某种原因,POSTS到products/addItemToCart不再使用方法addItemToCart,而是转到控制器show方法并将第二个参数视为要查找的记录的ID

我在show方法的开头放置了一个var_dump,以识别传递给show方法的值addItemToCart

好像路由文件忽略了以前的路由并跳过了资源路由中的默认值。

任何想法我犯了什么错误?

由于

更新:更全面的图片的附加代码:

使用此方法通过javascript生成POST:

if($('#rowId').val() !=="") {
    postUrl = "/products/editItemInCart";
} else {
    postUrl = "/products/addItemToCart";
}
$.ajax({
    type: "POST",
    url: postUrl,
    data: item,
    dataType: 'json',

    success: function(result) {
        //update the displayed Cart
        var data = result;
        updateCart();

    }
});

item是一个数组

Products控制器中的方法是:

<?php
//updated 08-11-2013

class ProductsController extends BaseController {

/**
 * Product Repository
 *
 * @var Product
 */
protected $product;

public function __construct(Product $product)
{
    $this->product = $product;
}

public function addItemToCart() {

    $product = Product::find( Input::get( 'id' ) );
   //method code
}

**
 * Display the specified resource.
 *
 * @param  int  $id
 * @return Response
 */
public function show($id)
{
    dd($id);

    $product = $this->product->findOrFail($id);

    return View::make('products.show', compact('product'));
}

正在使用show方法,而不是URL和路由

中指定的预期addToCart方法

我可以在firebug中看到POST中的已执行项目

1 个答案:

答案 0 :(得分:1)

您需要将参数expectation添加到路径字符串。

Route::post('products/addItemToCart/{id}', array('uses' => 'ProductsController@addItemToCart'));

否则资源控制器会将其解释为products/{param}/{param},因此它会转到控制器的默认post实现。