将路线映射到拉拉维尔的另一条路线



我正在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']);

最新更新