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

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

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

get_instance()

get_instance()
مقدار بازگشتی رفرنس به آبجکت کنترلر شما
نوع مقدار بازگشتی CI_Controller

هر کلاسی که در متد کنترلر خود به اصلاح instantiate - یعنی یک آبجکت از آن ساخته و استفاده - کنید، به راحتی و با استفاده از فانکشن get_instance می‌تواند به ریسورس‌های نیتیو کدایگنایتر دسترسی داشته باشد. این فانکشن آبجکت اصلی کدایگنایتر را برمی‌گرداند.

معمولا، برای فراخوانی متدهای در دسترس، کدایگنایتر نیاز به استفاده از $this دارد:

$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
// etc.

گرچه، $this فقط داخل کنترلر، متد و ویو کار می‌کنند. اگر می‌خواهید از کلاس‌های کدایگنایتر در کلاس‌های سفارشی خود استفاده کنید، برای اینکار ابتدا باید آبجکت کدایگنایتر را به یک متغییر تخصیص دهید:

$CI =& get_instance();

هنگامی که این آبجکت را به یک متغییر نسبت دادید، به جای $this می‌توانید از متغییر خود استفاده کنید:

$CI =& get_instance();

$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
// etc.

اگر می‌خواهید از get_instance() داخل کلاس دیگری استفاده کنید، بهتر است آن را به یک پراپرتی انتساب دهید. با این روش، دیگر نیاز ندارید در هر متدی، فانکشن get_instance() را به صورت مجزا فراخوانی کنید.

class Example {

        protected $CI;

        // We'll use a constructor, as you can't directly call a function
        // from a property definition.
        public function __construct()
        {
                // Assign the CodeIgniter super-object
                $this->CI =& get_instance();
        }

        public function foo()
        {
                $this->CI->load->helper('url');
                redirect();
        }

        public function bar()
        {
                $this->CI->config->item('base_url');
        }
}

در مثال بالا، به محض اینکه یک آبجکت از کلاس ایجاد کنید، هر دو متد foo() و bar() بدون اینکه نیازی به فراخوانی فانکشن get_instance() در هیچکدام از آن‌ها باشد، کار خواهند کرد.