كيف أقوم بتمديد فئة وحدة التحكم في إشعال الكود؟

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

  •  06-07-2019
  •  | 
  •  

سؤال

في دليل مكتبات نظام CI لدي فئة جديدة تسمى DD_Controller.php.يبدو هذا الملف كما يلي:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

class DD_Controller extends Controller 
{   
    protected $ddauthentication;


    function __construct()
    {           
        parent::Controller();
        $this->ddauthentication = "Authenticated";
    }
}
?>

يتم تعريف وحدة تحكم التطبيق الخاصة بي على النحو التالي:

class Inquiry extends DD_Controller 
{...}

تعمل فئة الاستعلام بشكل جيد عندما أقوم بتوسيع وحدة التحكم، لكني أحصل على

خطأ فادح:فئة "dd_controller" غير موجودة في C: Development LocalHost Applications Questiry Controllers Quopiry.php على السطر 4

عندما أقوم بتوسيع DD_Controller.في ملف التكوين لدي البادئة المحددة على هذا النحو:

$config['subclass_prefix'] = 'DD_';

هل لديك أي فكرة عما أفتقده؟

تيا

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

المحلول

يجب أن يكون DD_Controller.php في / نظام / التطبيق / المكتبات /

إذا كنت تستخدم نفس CI للتطبيقات متعددة، وتريد كل منهم لتكون قادرة على التحكم يمتد لواحدة مخصصة الخاص بك، ثم يمكنك توسيع الطبقة المراقب قاعدة في نفس الملف.

في نظام / المكتبات / Controller.php تحت الطبقة المراقب:

class Mega_Controller extends Controller {
    function Mega_Controller()
    {
        parent::Controller();
        // anything you want to do in every controller, ye shall perform here.
    }
}

وبعد ذلك عليك أن تكون قادرة على القيام بذلك في وحدات تحكم التطبيق الخاص بك:

class Home extends Mega_Controller {
    ....

ومنذ الطبقة تحكم الممتدة قمت بإنشائه سوف تكون متاحة. وأعتقد أن هذا هو أفضل ثم الكتابة وحدة تحكم قاعدة، ولكن من شأنها أن تعمل أيضا.

نصائح أخرى

هذا هو النهج الأفضل.قم بما يلي:

  1. انتقل إلى الدليل التالي: your_ci_app/application/core/ وقم بإنشاء ملف php يسمى MY_Controller.php (سيكون هذا الملف هو المكان الذي ستتواجد فيه أهم فئات الوالدين)
  2. افتح هذا الملف الذي أنشأته للتو وأضف فئاتك المتعددة، كما يلي:

    class Admin_Parent extends CI_Controller {
        public function __construct() {
            parent::__construct();
        }
    
        public function test() {
            var_dump("from Admin_Parent");
        }
    }
    
    class User_Parent extends CI_Controller {
    
        public function __construct() {
            parent::__construct();
        }
    
        public function test(){
            var_dump("from User_Parent");
        }
    
    }
    
  3. قم بإنشاء وحدات تحكم أطفالك ضمن هذا الدليل your_ci_app/application/controllers/ .سوف أسميه adminchild.php

  4. يفتح adminchild.php وقم بإنشاء رمز وحدة التحكم الخاصة بك، وتأكد من تمديد اسم الفئة الأصل، كما يلي:

    class Adminchild extends Admin_Parent {
    
        function __construct() {
            parent::__construct();
        }
    
        function test() {
            parent::test();
        }
    
    }
    

وأوصي لتجنب "تكسير" الملفات الأساسية كود إغنيتر. أفضل استخدام الأم التي تمتد الاحتمالات ومحاولة لتناسب لهم.

ونفس القاعدة أنصح أي مكتبة PHP / CMS. هذه القاعدة عدة أسباب: - القدرة على وقف الساعة ترقية دون takint بعين الاعتبار الآلاف من الملاحظات أين وكيف شرخ في الملفات الأساسية؛ - قابلية التنقل؛ - إمكانية لتبادل التعليمات البرمجية الخاصة بك - على سبيل المثال، فإن ذلك لن تكون قابلة للاستخدام من قبل كل من أنت وأصدقائك في حالة الضرورة، وسوف تساعدهم على الحفاظ مكتباتهم حتى الآن، وهو نفس لك

وبعبارة أخرى، وهذا هو أكثر مهنية وأنه يدفع لك في المستقبل من خلال سهولة الاستخدام، وقابلية وإمكانية تطبيق التحديث.

وفيما يتعلق بالسؤال الشخصي الخاص بك ...

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

وبهذه الطريقة يمكنك تقسيم حتى ما تحتاج إليه في قطع مختلفة ووضعها في مكتبات منفصلة: WebFeatures AdminFeatures وما إلى ذلك.

وبعد ذلك يمكنك فقط تحميل مكتبات اللازمة في منشئ التحكم الخاصة بك وانت القيام به.

وP.S. وأنا أعرف أن الطريق لا تنسجم مع مفهوم OOP "الصحيح" المقترحة، ولكن في نفس الوقت يجب ألا ننسى أبدا حول سلامة المكتبات المستخدمة.

كل شيء أعلاه هو أكثر واحد فقط عرض لي 7 سنوات من الخبرة في تطوير الشبكة المهنية، لذلك آمل أن تكون مفيدة إذا لم يكن لمتابعة، ثم على الأقل لتأخذ في الاعتبار.

والتحيات، انطون

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