ساخت کلاس‌های هسته سیستم

مجتبی پاکزاد کدایگنایتر 3.1.9 در حال تکمیل رایگان

هر بار که کدایگنایتر اجرا می‌شود، چندین کلاس‌ پایه نیز به صورت اتوماتیک به عنوان بخشی از هسته فریمورک لود می‌شوند. با این حال، امکان تعویض کلاس خودتان با هر کدام از کلاس‌های هسته سیستم یا حتی توسعه کلاس هسته نیز وجود دارد.

اکثر کاربران هرگز به چنین قابلیتی نیاز ندارند، اما دولوپرهایی که مایل به تغییری برجسته در هسته کدایگنایتر باشند نیز امکان جاگزین کردن یا توسعه آن‌ها را دارند.

توجه

ایجاد تغییرات در کلاس هسته سیستم، پیامدهای زیادی دارد، بنابراین قبل از تلاش برای انجام اینکار حتما از کاری که می‌خواهید انجام دهید اطمینان حاصل کنید که می‌دانید.

لیست کلاس‌های سیستم

لیست زیر، فایل‌های هسته سیستم هستند که با هر بار اجرای کدایگنایتر فراخوانی می‌شوند:

  • Benchmark
  • Config
  • Controller
  • Exceptions
  • Hooks
  • Input
  • Language
  • Loader
  • Log
  • Output
  • Router
  • Security
  • URI
  • Utf8

جایگزین کردن کلاس‌های هسته

برای استفاده از یکی از کلاس‌های خودتان به جای کلاس پیش‌فرض مورد نظر، تنها کافی است که آن را در دایرکتوری application/core/ قرار دهید:

application/core/some_class.php

اگر این دایرکتوری وجود نداشت، می‌توانید آن را بسازید.

هر فایل کلاسی باید همنام با یکی از نام‌های لیست بالا باشد تا به جای کلاس هسته‌ای استفاده شود که معمولا هنگام لود کدایگنایتر فراخوانی می‌شود.

توجه داشته باشید که کلاس شما باید از پیشوند CI استفاده کند. برای مثال، اگر فایل شما Input.php نام دارد، کلاس داخل این فایل باید به صورت زیر تعریف شود:

class CI_Input {

}

توسعه کلاس هسته

اگر تمام کاری که می‌خواهید انجام دهید در حد افزودن چند قابلیت - شاید افزودن یک یا دو متد - به لایبرری موجود است، پس جایگزین کردن کل لایبرری با کلاس خودتان بیش از حد افراطی است. در این صورت بهتر است کلاس را توسعه دهید. توسعه یک کلاس تقریبا مشابه جایگذاری یک کلاس است، البته با دو استثنا:

  • کلاس شما باید از کلاس والد مشتق شود.
  • نام کلاس جدید شما و نام فایل آن باید دارای پیشوند MY_ باشند (این مورد قابل تنظیم و تغییر است. ادامه را مطالعه کنید.).

برای مثال، برای توسعه کلاس نیتیو Input، یک فایل در دایرکتوری بسازید و در آن کلاس را به صورت زیر تعریف کنید:

class MY_Input extends CI_Input {

}

توجه

اگر نیاز به استفاده از متد construct در کلاس خود دارید، حتما متد construct کلاس والد را در این متد فراخوانی کنید.

class MY_Input extends CI_Input {

        public function __construct()
        {
                parent::__construct();
                // Your own constructor code
        }
}

نکته: هر فانکشنی در کلاس شما که همنام با متدی از کلاس والدش باشد، به جای متد والد استفاده می‌شود (این قابلیت "بازنویسی متد" نام دارد - اصول شی‌گرایی در php را مطالعه کنید).

اگر کلاس Controller که یکی از کلاس‌های هسته کدایگنایتر است را توسعه دهید، حتما کلاس‌های کنترلر اپلیکیشن خود را از کلاس جدید خودتان مشتق کنید.

class Welcome extends MY_Controller {

        public function index()
        {
                $this->load->view('welcome_message');
        }
}

تنظیم پیشوند لایبرری‌های شما

برای تنظیم پیشوند کلاس فرعی خود، فایل application/config/config.php را باز کنید و به دنبال خط زیر بگردید:

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

لطفا دقت کنید که پیشوند تمامی لایبرری‌های نیتیو کدایگنایتر CI_ تعیین شده است، بنابراین نباید از آن به عنوان پیشوند استفاده کنید.