是相当于Laravel 3的路线::在Laravel 4分享?
题
我最近将Laravel 3迁移到Laravel 4的申请,并遇到了Laravel 3中使用的东西,即我无法在Laravel 4中找到相同的东西。
在Laravel 3中有一个生成的icetagcode,在我的应用程序中,存在以下共享路由,基本上被重定向了一个系列遗留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()
方法使用Regex来确定它是否与列表中的任何URL匹配。但是,我仍然没有觉得这与Laravel 3中的内容一样优雅(除非你真的喜欢普通表达并找到优雅)。
我仍然觉得有一个更优雅的解决方案。
Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');
. 不隶属于 StackOverflow