Есть ли эквивалент Route::share из Laravel 3 в Laravel 4?
Вопрос
Недавно я перенес приложение с Laravel 3 на Laravel 4 и наткнулся на что-то, что использовалось в Laravel 3, чему я не смог найти эквивалента в Laravel 4.
В Laravel 3 был Route::share
и в моем приложении был следующий общий маршрут, который в основном перенаправлял устаревшие URL-адреса серии на новый URL-адрес.Очевидно, это можно сделать с помощью правил mod_rewrite, но может быть и другое поведение, помимо простых перенаправлений, которые происходят на маршруте, который может быть разделен.
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 );
} );
Есть ли эквивалент этому в Laravel 4?Единственное, что мне удалось сделать, это создать отдельные маршруты для каждого из них.Кажется, должен быть более элегантный способ:
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'); });
Решение
Я собираюсь опубликовать это как ответ на свой вопрос, потому что я нашел кое-что, что работает.Здесь используется параметр URL и where()
метод с регулярным выражением, чтобы определить, соответствует ли он какому-либо URL-адресу в списке.Однако мне все еще не кажется, что это так же элегантно, как в Laravel 3 (если только вы действительно не любите регулярные выражения и не находите их элегантными).
Я все еще считаю, что есть более элегантное решение.
Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');