سؤال

ولدي مشكلة أنني لا يمكن معرفة.

وأنا بناء إطار صغير (الممارسة)، والآن أنا بناء مكتبة المصادقة. كل شيء يعمل بشكل رائع إلا عندما كنت في محاولة لاصلاح قاعدة "الاستدعاء". يستخدم حكم الاستدعاء عندما يحتاج ديف لاستخدام القاعدة التي دوشين 'ر موجود في ليب مدقق ..

وهنا هو كيف أنا أفعل ذلك.

في وحدة تحكم:

$this->validator->check('req|callback:test', $_POST['module_name'], 'Module Name');

والمصادقة الدرجة:

public function check($rules, $input, $fieldname='') {
    $rule = explode('|', $rules);
    foreach ($rule as $r) {
        $request = explode(":",$r,2);
        $method = array_shift($request);
        $parameter = $request;
        array_unshift($parameter,$input);   
        array_push($parameter,$fieldname);
        if (method_exists($this, $method)) {
            call_user_func_array(array($this,$method), $parameter);
        }
  }

protected function callback($input, $key, $fieldname='') {

}

ومشكلتي هي أنه كيف يمكنني استخدام وحدة تحكم "الحالي". على سبيل المثال، في هذه الحالة أنا في حاجة للعثور على:

UserController::test();

ويمكنني العثور على الطريقة الصحيحة في المفتاح $ ولكن هو طريقة بسيطة لمعرفة تحكم اللي تبونه وهذا ما المتداول؟

ولقد حاولت استخدام عنوان الموقع مثل:

$controller = ucfirst($uri->uri[1]).'Controller';
$controller::$key();

ولكن ذلك لم يعمل على الإطلاق .. أي أفكار؟

هل كانت مفيدة؟

المحلول

وهناك عدة طرق مختلفة لهذا النهج.

أولا، وأفترض أنه في مكان ما لديك بعض التعليمات البرمجية التي يتحول URI

example.com/foo

وإلى اسم_الفئة تحكم

class FooController

وهذا ما يسمى عادة "التوجيه". إذا كان الأمر كذلك، تعرض بطريقة أو بأخرى صفك التوجيه / طريقة لمدقق و / أو النظام بأكمله. هذا وسوف تسمح لك، في أي وقت، والحصول على اسم وحدة تحكم من URI.

والثانية، عندما instantiating المصادقة الخاص بك، وإعطائها إشارة إلى كائن وحدة تحكم لطلب معين. ثم انها مجرد دعوة بسيطة لget_class_name أو انعكاس API بعيدا.

وثالثا، تتطلب أن يتم تمرير جهاز تحكم جنبا إلى جنب مع دعوتكم إلى أسلوب check.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top