2016-02-16 72 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類,如果這是一個好方法嗎?也許有非常不同的方法? –