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'); });
Était-ce utile?

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)');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top