هل هناك ما يعادل Laravel 3's Route::share في 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() طريقة باستخدام regex لتحديد ما إذا كان يطابق أيًا من عناوين 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