Frage

Ich habe kürzlich eine Anwendung von Laravel 3 auf Laravel 4 migriert und bin auf etwas gestoßen, das in Laravel 3 verwendet wurde und zu dem ich in Laravel 4 kein Äquivalent finden konnte.

In Laravel 3 gab es eine Route::share und in meiner Anwendung gab es die folgende gemeinsame Route, die im Grunde genommen eine Reihe älterer URLs auf eine neue URL umleitete.Natürlich könnte dies mit mod_rewrite-Regeln geschehen, aber es könnte neben einfachen Weiterleitungen, die auf der Route auftreten, die geteilt werden könnte, auch ein anderes Verhalten geben.

Route::share( array(
    array('GET', 'Songbook/songbook.html'),
    array('GET', 'Songbook'),
    array('GET', 'songbook/songbook.html'),
    array('GET', 'songbook'),
    array('GET', 'tgbs'),
), function () {
    return Redirect::to( 'lyrics', 301 );
} );

Gibt es ein Äquivalent dazu in Laravel 4?Das einzige, was ich tun konnte, war, für jeden von ihnen diskrete Routen zu erstellen.Es scheint, als ob es einen eleganteren Weg geben sollte:

Route::get('Songbook/songbook.html', function(){ return Redirect::route('lyrics'); });
Route::get('Songbook',               function(){ return Redirect::route('lyrics'); });
Route::get('songbook/songbook.html', function(){ return Redirect::route('lyrics'); });
Route::get('songbook',               function(){ return Redirect::route('lyrics'); });
Route::get('tgbs',                   function(){ return Redirect::route('lyrics'); });
War es hilfreich?

Lösung

Ich werde dies als Antwort auf meine eigene Frage posten, weil ich etwas gefunden habe, das funktioniert.Dies verwendet einen URL-Parameter und die where() methode mit einem regulären Ausdruck, um festzustellen, ob er mit einer der URLs in einer Liste übereinstimmt.Ich habe jedoch immer noch nicht das Gefühl, dass dies so elegant ist wie in Laravel 3 (es sei denn, Sie mögen reguläre Ausdrücke wirklich und finden sie elegant).

Ich habe immer noch das Gefühl, dass es eine elegantere Lösung gibt.

Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
    ->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top