我将有如下所示的url
whatever.com/products/accessories/1
whatever.com/products/amplifiers/2
whatever.com/products/speakers/3我到处阅读和搜索,但我想不出如何用一条路线来处理:
如果我做下面的事情
whatever.com/products/1
whatever.com/products/2
whatever.com/products/3我可以使用下列路线:
Route::model('product', 'Product');
Route::get('products/{product}', function(Product $product)
{
return View::make('product', array('product' => $product->toArray()));
});但是这并不是非常友好的urls。
提前感谢
发布于 2016-03-24 03:11:17
为了强制执行中间参数并使其有意义,在构建传递的最终ID的同时,您可以使用路由模型绑定和一个解析器函数。传递给解析器函数的第二个参数是Illuminate\Routing\Route的一个实例,如果您检查它的API接口,您将看到它有一个parameter()方法,它允许您获取路由中任何参数的值。这使您可以访问这两个参数并从中构建查询。
Route::bind('product', function($value, $route){
$category = $route->parameter('category');
$product = Product::where(['id' => $value, 'category' => $category])->first();
return $product ?: 'Not found';
});
Route::get('products/{category}/{product}', function($category, $product)
{
return View::make('product', array('product' => $product->toArray()));
});注意,如果没有结果,我将返回一个字符串,该字符串表示'Not found',但您可以返回任何内容。这允许您强制执行这个中间参数实际上是有意义的,这样whatever.com/products/amplifiers/2将返回一个实际的结果,而whatever.com/products/fake/2则不会。
发布于 2016-03-24 02:49:03
经过几个小时的搜索,我找到了以下解决方案
Route::get('products/{p1?}/{p2?}/{p3?}/{p4?}','ProductController@index');
https://stackoverflow.com/questions/36191617
复制相似问题