2016-02-16 67 views
1

我正在Laravel 5.2中开发一个应用程序,该应用程序必须具有友好的URL -s。这对常规方式来说并不是问题,{slug}通配符由控制器处理,但我想以不同的方式进行处理。将路线映射到Laravel中的另一条路线

现在我只有两个控制器:

和路线房源的产品选择类别:

Route::get('product/{product}', '[email protected]')->name('product.show'); 
Route::get('category/{category}', '[email protected]')->name('category.show'); 

所以当我想要回声只是使用route('product.show', compact('product'))

没有什么特别的,直到我想处理从数据库中获取不同的URL。我认为可以制作另一条分配给现有的路线,当我使用route(...)帮手时,它将自动处理。但事实并非如此。所以,比如我有一个新的URL:

domain.com/new-url-for-product.html 

因此通过路线应该被分配到一些ID,这是由路径模型,粘结剂{}产品处理通配符常规“product.show”路线。 route(..)助手应该打印友好的URL-s。

我不知道我的策略是否好。你如何处理类似的问题?

+0

你的问题描述不足以理解你的问题,请详细说明一下,所以社区提供了更好的解决方案。 – Qazi

回答

0

当然路线会自动处理这个。看看这个。我只是给你举例,你必须根据你的需要设置这些代码。

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'); 

就会产生此URL

域。 com/new-url2-for-product.html

等等,然后你必须在你的控制器方法中处理所有这些。 例如:这条路你的控制器的方法是[email protected]这是

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'=>'[email protected]']); 
+0

感谢您快速回答。您知道如何使用路径模型绑定来实现该目标,其中{category}和{product}是模型吗? –

+0

下面是Laravel Model Binding文档的最佳示例。我希望这会帮助你,让我知道如果你想在这方面的任何其他 [follow here](https://laravel.com/docs/5.1/routing#route-model-binding) – Qazi

+0

我熟悉文档。问题是我喜欢在目标控制器方法(例如ProductsControllers @ show)中使用绑定到数据库模型的产品模型。这就是为什么我想实施路由到路由策略的原因。你知道如何扩展Route类,如果这是一个好方法吗?也许有非常不同的方法? –