هل هناك ما يعادل Laravel 3's Route::share في 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()
طريقة باستخدام regex لتحديد ما إذا كان يطابق أيًا من عناوين URL الموجودة في القائمة.ومع ذلك، ما زلت لا أشعر بأن هذا الأمر أنيق كما كان في Laravel 3 (إلا إذا كنت تحب التعبيرات العادية وتجدها أنيقة).
ما زلت أشعر أن هناك حلاً أكثر أناقة.
Route::any('{any?}', function(){ return Redirect::route('lyrics'); })
->where('any', '(Songbook\/songbook\.html|Songbook|songbook\/songbook\.html|songbook|tgbs)');