我正在Laravel 5.2中开发一个应用程序,该应用程序必须具有友好的URL-s。这对于常规方式没有问题,其中 {slug} 通配符由控制器处理,但我想以不同的方式制作它。
目前我只有两个控制器:
-
ProductsController@show
显示详细信息产品 -
CategoriesController@show
显示所选类别,并列出分配给它的商品
和路线:
Route::get('product/{product}', 'ProductsCategory@show')->name('product.show');
Route::get('category/{category}', 'CategoriesController@show')->name('category.show');
所以当我想回应一个正义的使用route('product.show', compact('product'))
在我想处理从数据库中获取的不同 URL-s 之前,没有什么特别的。我认为可以创建分配给现有路线的另一条路线,当我使用route(...)
助手时,它将自动处理。但事实并非如此。例如,我有一个新的网址:
domain.com/new-url-for-product.html
因此,通过路由,它应该分配给具有某些 ID 的常规"product.show"路由,该路由由 {product} 通配符的路由模型绑定器处理。对于route(..)
帮助程序也是如此,它应该打印友好的 URL-s。
我不知道我的策略是否好。你如何处理类似的问题?
路由会自动处理这个问题。 看看这个。我只是给你举个例子,你必须根据需要设置这段代码。
route('product.show', 'product'=>'new-url-for-product.html');
将生成此
domain.com/new-url-for-product.html
route('product.show', 'product'=>'new-url2-for-product.html');
将生成此网址
domain.com/new-url2-for-product.html
依此类推,然后您必须在控制器方法中处理所有这些。例如:此路由的控制器方法是ProductsCategory@show
public function show($product){
if($product == 'new-url-for-product.html'){
//perform this
}
if($product == 'new-url2-for-product.html'){
//perform this
}
}
这只是一个例子,你必须根据你的需要来映射它
编辑 这是我测试的示例
Route::get('/product/{product}.html', ['as'=>'product.show', 'uses'=>'ProductsCategory@show']);