Есть ли эквивалент Route::share из Laravel 3 в Laravel 4?

StackOverflow https://stackoverflow.com//questions/21002101

  •  20-12-2019
  •  | 
  •  

Вопрос

Недавно я перенес приложение с 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)');
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top