2016-06-10 8 views
0

Ich erstelle eine Laravel 5.1-Anwendung, die Produkte auf Seiten auflistet. Jetzt hat jedes Produkt in der Datenbank die URL der Produktdetailseite. Ich habe eine Methode ausgeführt, die all diese URLs exportiert und sie in Laravel-Routen konvertiert, und die Routen werden in eine Datei geschrieben und in das Laravel-Routing einbezogen. Ich habe das auf diesem Weg gemacht, um in der Lage zu sein, das Routing zu optimieren, indem ich die Routen von laravel benutze: cache Befehl. Nun geht es in meiner Frage eigentlich um Optimierung, was wäre besser, eine Datei mit allen Routen zu haben, sagen wir 100K Routen oder einen einzigen Einstiegspunkt, der die betreffende Route innerhalb der Datenbank vergleicht und das jeweilige Produkt zurückgibt.Optimierungsvorschläge für Laravel-Routing

+3

Letzter. Erstelle keine gazillionen Routen. Vereinfachen Sie Ihre Routen, lassen Sie sie einen Parameter enthalten, den Sie dann für eine Datenbanksuche verwenden. Absolut. – Here2Help

+0

@ Here2Help, ich bin mir nicht sicher, ob ich dem völlig zustimme. Das Hinzufügen eines DB-Lookups zu einer Anfrage verlängert die Anfragezeit und kann sogar der Performance schaden. Vielleicht hilft ein Haufen Caching der Situation ein wenig, aber ich denke, es ist eine schlechte Idee. – vsharper

+0

@vsharper Eine DB-Suche ist genau das, was produktorientierte Websites _should_ tun sollten. Was, denkst du, sollte er seine routes-Datei jedes Mal aktualisieren, wenn ein neues Produkt hinzugefügt wird? Erstellen Sie einfach eine statische Website, vergessen Sie Laravel und PHP. – Here2Help

Antwort

4

Für jedes Produkt ist keine individuelle Route erforderlich. Möglicherweise Speichern Sie eine eindeutige Slug (Semantic URL) in der Datenbank? Dann haben Sie eine Route, die ein Produkt auf der Basis einer Route anzeigt.

benutzerfreundliche Slug könnte etwas wie "T-Shirt-9000" sein. Wenn Sie dies nicht möchten, können Sie immer die eindeutige ID verwenden, die Sie bereits für das Produkt in der Datenbank festgelegt haben.

Innerhalb Ihrer show-Methode müssten Sie die DB mit der Slug-Vergangenheit in der Anfrage an die Datenbank abfragen.

kurzes Beispiel:

In routes.php

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

Produkt-Controller

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

Ja! Dies.Außer, Sie rufen den Parameter 'product' in Ihrer Route auf, aber' $ productRequested' im Controller. Vielleicht möchte ich das beheben. – Here2Help

+0

Ja, ich habe vergessen, es muss gleich benannt werden. Fest! –

+0

Es muss nicht gleich benannt werden, aber es ist wahrscheinlich gut, weniger verwirrend zu sein. – user3158900

0

die Tatsache, dass Sie verwenden, um einen Rahmen für die Sie Ihren Code

zu optimieren erzwungen werden Routendatei ermöglicht es Ihnen, den schnellsten Weg zu finden, die Anzahl der zugeordneten UR zu minimieren Ls.

der Begriff der Route von Symfony angeboten Laravel können Sie alle Variablen Ihrer URL mit einem einzigen Weg zu manipulieren, zum Beispiel:

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

diese Route alle Variablen in der URL zu yourMethod();

sendet
Verwandte Themen