2014-02-12 14 views
6

Wie definiere ich eine case insensitive (Teil einer) Route?Laravel Groß-und Kleinschreibung Routen

Beispiel:

Jede Verwendung von Großbuchstaben in dem feststehenden Teil der Strecke nicht funktioniert:

Ich verstehe, wie ich machen funktioniert kann Parameter wie {parameter} verwenden ein Regex-Muster mit -> mit(), aber das hilft mir nicht mit dem festen Teil der Route, wie oben beschrieben.

+0

Strictly Sprechen, mit einem Parameter und Regex * konnte * mit Ihrem spezifischen Problem helfen (Profil in einen dynamischen Parameter verwandeln, spezifizieren tha t muss das Wort "Profil" insensitiv sein), aber ich verstehe, dass es bei weitem keine ideale Lösung ist. Definitive Stop-Gap-Maßnahme aber. – alexrussell

+0

Der feste Teil könnte nicht case insensitive sein, aber wenn es ein dynamischer Parameter wäre, hättest du es tun können, wie du es bereits weißt. –

+0

haben Sie versucht, etwas wie 'Route :: get ('{userId}/{profile}', 'Controller @ action') -> where ('profile', '/ profile/i');'? – Gadoma

Antwort

5

Dies kann durch die Definition von Routen die folgende Art und Weise gelöst werden:

Route::get('/{userId}/{profile}')->with('profile', '(?i)profile(?-i)'); 

smarter Selbst, als pattern definieren, dann wird es auch in Route Gruppen zur Verfügung.

Route::pattern('profile', '(?i)profile(?-i)'); 
Route::get('/{userId}/{profile}'); 
+0

nett. Ich mag die Musterlösung – ryanwinchester

+0

Das hat mir gerade geholfen. Vielen Dank. – ceejayoz

0

Hinzufügen von Mustern funktionieren nur auf einer Strecke zu einer Zeit, wenn Sie alle Routen wollen dieser Fall unempfindlich Add seinen Abschnitt in Ihrer /app/filter.php Datei in dem vor:

Ich schrieb eine Was tut das? https://gist.github.com/samthomson/f670f9735d200773e543

Bearbeiten Sie Ihre app/filters.php, um nach Großbuchstaben in der Route zu suchen und sie auf eine konvertierte Route umzuleiten.

0

Für diejenigen, Apache verwenden Sie könnte auch dies tun:

Hierbei wird die Spitze Ihrer vHost Datei hinzufügen

RewriteEngine On 
RewriteMap lowercase int:tolower 

und in Ihrem .htaccess

RewriteCond $1 [A-Z] 
RewriteRule ^(.*)$ /${lowercase:$1} [R=301,L] 
+0

Ich habe die erwähnten Lösungen nicht ausprobiert, sondern bin nur über die generelle Umwandlung der URL in Kleinbuchstaben nachgedacht: Einige Routen benötigen möglicherweise gemischte Groß-/Kleinschreibung, zum Beispiel wenn die Groß-/Kleinschreibung über die URL weitergegeben wird (zB bestimmte Hash-Typen usw.). – preyz

Verwandte Themen