Pregunta

Recientemente migré una aplicación de Laravel 3 a Laravel 4 y encontré algo que se usaba en Laravel 3 y que no pude encontrar un equivalente en Laravel 4.

En Laravel 3 había un Route::share y en mi aplicación había la siguiente ruta compartida que básicamente redirigía una serie de URL heredadas a una nueva URL.Obviamente, esto podría hacerse con las reglas mod_rewrite, pero podría haber otros comportamientos además de simples redireccionamientos que ocurren en la ruta que podría compartirse.

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

¿Existe un equivalente a esto en Laravel 4?Lo único que pude hacer fue crear rutas discretas para cada uno de ellos.Parece que debería haber una forma más 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'); });
¿Fue útil?

Solución

Voy a publicar esto como respuesta a mi propia pregunta porque encontré algo que funciona.Esto utiliza un parámetro de URL y el where() método con una expresión regular para determinar si coincide con alguna de las URL de una lista.Sin embargo, todavía no siento que esto sea tan elegante como lo que era en Laravel 3 (a menos que realmente te gusten las expresiones regulares y las encuentres elegantes).

Todavía siento que hay una solución más elegante.

Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
    ->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top