2016-06-10 75 views
0

我正在創建一個列出產品的Laravel 5.1應用程序。現在數據庫中的每個產品都具有產品詳細信息頁面的網址。我做了一個方法,導出所有這些URL並將它們轉換爲laravel路由,並將這些路由寫入一個文件幷包含在laravel路由中。我已經這樣做了,以便能夠使用laravel的路由優化路由:緩存命令。現在我的問題實際上是關於優化,哪種方式會更好,有一個包含所有路由的文件,比方說100K路由,或者有一個入口點來比較數據庫中有問題的路由並返回相應的產品。Laravel路由的優化建議

+3

後者。不要創建一個gazillion路線。簡化您的路線,讓它們包含一個參數,然後將其用於數據庫查找。絕對。 – Here2Help

+0

@ Here2Help,我不太確定我完全同意這一點,在請求中添加數據庫查找只是增加了請求時間,甚至可能會對性能造成不利影響。也許一堆緩存將有助於這種情況,但我認爲這是一個壞主意。 – vsharper

+0

@vsharper查找數據庫正是產品驅動的網站應該做的事情。什麼,你認爲他每次添加新產品時都應該更新他的路線文件?也許不妨建立一個靜態網站,然後忘記Laravel和PHP。 – Here2Help

回答

4

沒有必要爲每個產品制定單獨的路線。可能在數據庫中存儲一個獨特的slug(語義URL)?然後有一條路線根據傳遞給路線的內容顯示產品。

用戶友好的slu could可能就像't恤-9000'。如果你不想要這個,你可以使用你已經爲數據庫中的產品設置的唯一ID。

在您的show方法中,您需要使用向數據庫發送請求的數據庫查詢數據庫。

簡單的例子:

在routes.php文件

Route::get('/products/{product}', '[email protected]'); 

產品控制器

public function show($product) 
{ 
    $productRequested = Product::where('url_slug', $product)->first(); 
    // Do whatever from here 
} 
+0

是的!這個。除了在路由中調用參數'product',而在控制器中調用$ productRequested'。可能想解決這個問題。 – Here2Help

+0

是的,我忘了它需要命名相同。固定! –

+0

它不需要命名相同,但可能不太令人困惑。 – user3158900

0

的事實,你用你將被強制執行的框架來優化你的代碼

路線文件允許您以最快的方式來最小化映射UR的數量LS。

通過的Symfony提供給laravel讓你操縱你的URL的所有變量與一個單一的路由路徑的概念,例如:

route::get('{category}/{id}/{slug}/{var1}/{var2}/{var3}/{varX}','[email protected]'); 

這條航線將派出在url中所有變量yourMethod();