我已为资源设置路由并为同一控制器添加了其他路由。我已经有了这条路线,并且没有想到我已经改变了什么,但现在它已经在控制器中路由到了错误的方法。
我已经意识到这些路线的先进先出原则,并且此时已经设置好了:
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中的已执行项目
答案 0 :(得分:1)
您需要将参数expectation添加到路径字符串。
Route::post('products/addItemToCart/{id}', array('uses' => 'ProductsController@addItemToCart'));
否则资源控制器会将其解释为products/{param}/{param}
,因此它会转到控制器的默认post
实现。