هل من الممكن توجيه جميع عناوين URL بشرطات في FuelPHP؟

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

  •  11-12-2019
  •  | 
  •  

سؤال

في التكوين التالي، هل من الممكن استخدام تعبير عادي أو أي طريقة أخرى إلى جانب تحديد كل مسار لاستخدام وحدة التحكم thisisatest عندما يكون عنوان URL this-is-a-test/action؟هل يتعين علي إنشاء/توسيع فئة جهاز التوجيه الخاص بي؟

<?php
return array(
    '_root_'  => 'home/index',  // The default route
    '_404_'   => 'error/404',    // The main 404 route

    //'hello(/:name)?' => array('welcome/hello', 'name' => 'hello')
);

/* end of config/routes.php */
هل كانت مفيدة؟

المحلول

الطريقة التي نفذت بها هذا كانت التوسع \Fuel\Core\Router باستخدام ما يلي.تعمل فئة جهاز التوجيه مع URI الذي تم تمريره عبر الطرق الموجودة في security.uri_filter من config.php لذلك بدلاً من تعديل أساليب فئة جهاز التوجيه، قمت بإضافة ملحق جهاز التوجيه الخاص بي رد اتصال إلى تلك المصفوفة.

class Router extends \Fuel\Core\Router
{
    public static function _init()
    {   
        \Config::set('security.uri_filter', array_merge(
            \Config::get('security.uri_filter'),
            array('\Router::hyphens_to_underscores')
        ));
    }

    public static function hyphens_to_underscores($uri)
    {
        return str_replace('-', '_', $uri);
    }
}

يمكنك بسهولة إضافته مباشرة إلى مصفوفة التكوين الموجودة فيه app/config/config.php عن طريق الإغلاق أو استدعاء طريقة الفصل أو الوظيفة.

الجانب السلبي لهذا هو أن كلا من /path_to_controller/action و /path-to-controller/action سيعملان وربما يتسببان في بعض مشكلات تحسين محركات البحث للمحتوى المكرر ما لم تقم بالإشارة إلى ذلك إلى عنكبوت البحث.هذا على افتراض الإشارة إلى كلا المسارين في مكان ما، أي.خريطة الموقع أو <a href=""> إلخ.

نصائح أخرى

أعتقد أن فئة جهاز التوجيه لا تحتوي على الوظيفة بشكل افتراضي.ستحتاج بالفعل إلى توسيع أو إنشاء فئة جهاز التوجيه الخاصة بك.

يمكنك استخدام إعداد التكوين Security.uri_filter لذلك.

قم بإنشاء وظيفة تقوم بتحويل الواصلات إلى شرطات سفلية، وبذلك تكون قد انتهيت.لا تحتاج إلى توسيع فئة جهاز التوجيه لذلك.ما عليك سوى توفير اسم الوظيفة (سواء كان ذلك في فئة أو وظيفة محددة في التمهيد) إلى التكوين، وستكون خارج الخدمة.

أعلم أنه بعد الحدث، لكن هذا لأي شخص آخر يريد ذلك في المستقبل...

لتجنب الخلط بين الشرطات السفلية والمجلدات الفرعية، فضلت تحويل الواصلات إلى حالة الجمل، لذا فإن توجيه عنوان URL this-is-a-test إلى الصف Controller_ThisIsATest.

لقد فعلت ذلك (في FuelPHP 1.4) عن طريق إضافة وظيفة مجهولة إلى "uri_filter" في إعدادات "الأمان" في fuel/app/config/config.php:

'security' => array(
    'uri_filter' => array('htmlentities',
        function($uri) { 
            return str_replace(' ', '', ucwords(str_replace('-', ' ', $uri))); 
        }),
),
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top