Pergunta

Recentemente migrei um aplicativo do Laravel 3 para o Laravel 4 e me deparei com algo que foi usado no Laravel 3 e que não consegui encontrar equivalente no Laravel 4.

No Laravel 3 havia um Route::share e em meu aplicativo havia a seguinte rota compartilhada que basicamente redirecionava uma série de URLs herdados para um novo URL.Obviamente, isso poderia ser feito com regras mod_rewrite, mas pode haver outro comportamento além de simples redirecionamentos que acontecem na rota que pode ser compartilhada.

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 um equivalente a isso no Laravel 4?A única coisa que consegui fazer foi criar rotas discretas para cada um deles.Parece que deveria haver uma maneira mais 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'); });
Foi útil?

Solução

Vou postar isso como resposta à minha própria pergunta porque encontrei algo que funciona.Isso usa um parâmetro url e o where() método com um regex para determinar se ele corresponde a algum dos URLs em uma lista.No entanto, ainda não acho que isso seja tão elegante quanto o que estava no Laravel 3 (a menos que você realmente goste de expressões regulares e as ache elegantes).

Ainda sinto que existe uma solução mais elegante.

Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
    ->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top