Domanda

Ho recentemente migrato un'applicazione da Laravel 3 a Laravel 4 e ha trovato qualcosa che è stato usato a Laravel 3 che non riuscivo a trovare un equivalente a Laravel 4.

A Laravel 3 c'era un Route::share e nella mia applicazione è stato il seguente percorso condiviso che fondamentalmente ha reindirizzato un URL di una serie legacy a un nuovo URL.Ovviamente, questo potrebbe essere fatto con le regole Mod_rewrite, ma potrebbe esserci altri comportamenti oltre a semplici reindirizzamenti che accadono nel percorso che potrebbe essere condiviso.

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 );
} );
.

C'è un equivalente a questo a Laravel 4?L'unica cosa che sono stata in grado di fare era creare percorsi discreti per ognuno di loro.Sembra che ci dovrebbe essere un modo più elegante:

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'); });
.

È stato utile?

Soluzione

Ho intenzione di pubblicare questo come risposta alla mia stessa domanda perché ho trovato qualcosa che funziona.Questo utilizza un parametro URL e il metodo where() con un regex per determinare se corrisponde a uno qualsiasi degli URL in un elenco.Comunque non ritengo ancora che questo sia elegante come quello che era a Laravel 3 (a meno che non ti piaccia davvero le espressioni regolari e trovarle eleganti).

Sento ancora che ci sia una soluzione più elegante.

Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
    ->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top