Existe-t-il un équivalent à Route::share de Laravel 3 dans Laravel 4 ?
Question
J'ai récemment migré une application de Laravel 3 vers Laravel 4 et je suis tombé sur quelque chose qui était utilisé dans Laravel 3 et dont je n'ai pas trouvé d'équivalent dans Laravel 4.
Dans Laravel 3, il y avait un Route::share
et dans mon application, il y avait la route partagée suivante qui redirigeait essentiellement une série d'URL héritées vers une nouvelle URL.Évidemment, cela pourrait être fait avec les règles mod_rewrite, mais il pourrait y avoir d'autres comportements que de simples redirections qui se produisent dans la route qui pourrait être partagée.
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-t-il un équivalent dans Laravel 4 ?La seule chose que j'ai pu faire, c'est créer des itinéraires discrets pour chacun d'eux.Il semble qu'il devrait y avoir une manière plus élégante :
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'); });
La solution
Je vais poster ceci comme réponse à ma propre question car j'ai trouvé quelque chose qui fonctionne.Cela utilise un paramètre url et le where()
méthode avec une expression régulière pour déterminer si elle correspond à l’une des URL d’une liste.Cependant, je ne pense toujours pas que ce soit aussi élégant que ce qui était dans Laravel 3 (à moins que vous n'aimiez vraiment les expressions régulières et que vous les trouviez élégantes).
Je pense toujours qu'il existe une solution plus élégante.
Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');