在Laravel 4中是否有相当于Laravel 3的Route ::分享?

时间:2014-01-08 17:09:27

标签: php laravel

我最近将一个应用程序从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'); });

1 个答案:

答案 0 :(得分:0)

我将发布这个作为我自己问题的答案,因为我发现了一些有用的东西。这使用url参数和带有正则表达式的where()方法来确定它是否与列表中的任何URL匹配。然而,我仍然觉得这不像Laravel 3那样优雅(除非你真的喜欢正则表达式并且发现它们很优雅)。

我仍然觉得有更优雅的解决方案。

Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
    ->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');