فایل helper در codeigniter چیست و چه کاربردی دارد

 در این مقاله به بررسی فایل های helper می پردازیم. این فایل های چه کمکی به ما می کنند و چرا از آن ها استفاده می کنیم و با قوانین ایجاد آن ها و چگونگی استفاده در فریمورک Codeigniter را مرور خواهیم کرد.

همانطور که از اسم این فایل ها مشخص است کمکی برای برنامه نویسی شما محسوب می شوند.قطعا با ساختار MVC آشنایی داربد و می دانید که بر اساس شی گرایی یا Object oriented کار میکند. یعنی کنترلر ها، مدل ها، کتابخانه ها به صورت کلاس ها با یکدیگر در ارتباط هستند.

حالا فرض کنید یک فانکشن در چندین مکان از برنامه شما می تواند مورد استفاده قرار گیرد. اگر فانکشن مورد نظر را در کتابخانه قرار دهید باید از آن کلاس نمونه ایجاد کنید و در هر کجا از برنامه از نمونه ایجاد شده استفاده کرد. حالا اگر در کنترلر نمونه ایجاد شود و شما بخواهید از این نمونه در view استفاده کنید باید نمونه را به view مورد نظر پاس دهید.

برای جلوگیری از این پیچیدگی ها فایل های helper به ما کمک می کنند در هرکجای برنامه و بدون نیاز به نمونه از یک سری توابع پرکاربرد استفاده کنیم.

قبل از استفاده از فانکشن های موجود در فایل helper باید آن را لود کنیم. در واقع فایل را include می کنیم

در ادامه نحوه لود کردن این فایل ها در فریمورک کدایگنایدر را بررسی می کنیم. این کار به دو صورت قابل انجام است.

به صورت پیش فرض codeigniter مجموعه ای از فایل های helper را دارد. برای مثال فایل های helper برای url، form و سایر فعالیت های پرکاربرد مانند ایمیل، کار با رشته ها، تاریخ و فایل ها را می توان به صورت پیش فرض مشاهده کرد. برای مشاهده این فایل ها به پوشه system  و helpers موجود در فولدر فریمورک رفته و لیست فایل ها را مشاهده کنید.

/codeigniter_folder/system/helpers

این فایل ها به صورت پیش فرض در کدایگنایدر موجود هستند.

ساخت فایل helper در codeigniter

تمام فایل ها باید در فولدر application و فولدر helpers ساخته شوند

application
    helpers
        myhelper_helper.php

همانطور که در کد بالا مشخص کردیم در فولدر  application فولدری به نام helpers وجود دارد که فایل های helpers در این بخش تعریف میشوند. فایل myhelper_helper.php را ایجاد و محتوای آن را به صورت زیر ویرایش میکنیم

نکته مهم در نام گذاری فایل های helper اینست که این نوع از فایل ها بعد از نام فایل و قبل از نوع فرمت، مقدار _helper را داشته باشد. برای مثال در کد بالا برای ساخت یک فایل کمکی به نام myhelper بایستی فایلی به نام myhelper_helper.php ایحاد کنیم در غیر اینصورت این فایل قابلیت لود شدن توسط کدایگنایدر را ندارد.

function say_hello() {
    echo 'Hello';
}

در واقع فایل helper ایجاد شده دارای یک فانکشن می باشد. با این حال یک فایل helper می تواند شامل مجموعه ای از فانکشن ها را شامل باشد.

function say_hello() {
    echo 'Hello';
}

function my_customize_error_404() {
    echo '404 Not found';
    exit;
}

بنابراین دو محل برای helper ها وجود دارد. helper های سیستمی که در فولدر system هستند و helper های شما که در فولدر application قرار دارند.

application/helpers/your_helpers_helper.php

system/helpres/systems_helper.php

شما فایل هایتان را در فولدر application ایجاد کنید.

لود کردن فایل های helper در کدایگنایدر

لود کردن این فایل ها در کنترلر برای یک بار کافیست. یعنی زمانی که کنترلر فراخوانی شده است و شما یک بار فایل helper مورد نظرتان را لود کرده اید در ادامه مسیر چه در model ها چه در view ها قابل استفاده است.

برای لود کردن فایل ها از دستور زیر در کنترلر ها استفاده می کنیم. دقت کنید که

کد نمونه زیر را برای توضیحات بیشتر نگاه کنید

class Article extends CI_Controller {

    function __construct() {
        parent::__construct();
    }

    function show() {
        $this->load->helper('myhelper');
        say_hello();        
    }

    function edit() {
        $this->load->helper('myhelper');
        my_customize_error_404();
    }

}

 لود کردن فایل های helper به صورت خودکار

همانطور که می دانید فریمورک Codeigniter در فولدر application دارای یک دایرکتوری به نام config می باشد. این دایرکتوری تنظیمات مربوط به مسیر یابی، پایگاه داده و غیره را شامل می شود. فایلی به نام autoload.php در این دایرکتوری config موجود می باشد که می تواند به صورت اتوماتیک فایل های Model، libraries و غیره را در کل فریمورک لود خواهد کرد. کد زیر محتویات فایل autoload.php را نشان می دهد

defined('BASEPATH') OR exit('No direct script access allowed');

/*
| -------------------------------------------------------------------
| AUTO-LOADER
| -------------------------------------------------------------------
| This file specifies which systems should be loaded by default.
|
| In order to keep the framework as light-weight as possible only the
| absolute minimal resources are loaded by default. For example,
| the database is not connected to automatically since no assumption
| is made regarding whether you intend to use it.  This file lets
| you globally define which systems you would like loaded with every
| request.
|
| -------------------------------------------------------------------
| Instructions
| -------------------------------------------------------------------
|
| These are the things you can load automatically:
|
| 1. Packages
| 2. Libraries
| 3. Drivers
| 4. Helper files
| 5. Custom config files
| 6. Language files
| 7. Models
|
*/

/*
| -------------------------------------------------------------------
|  Auto-load Packages
| -------------------------------------------------------------------
| Prototype:
|
|  $autoload['packages'] = array(APPPATH.'third_party', '/usr/local/shared');
|
*/
$autoload['packages'] = array();

/*
| -------------------------------------------------------------------
|  Auto-load Libraries
| -------------------------------------------------------------------
| These are the classes located in system/libraries/ or your
| application/libraries/ directory, with the addition of the
| 'database' library, which is somewhat of a special case.
|
| Prototype:
|
|	$autoload['libraries'] = array('database', 'email', 'session');
|
| You can also supply an alternative library name to be assigned
| in the controller:
|
|	$autoload['libraries'] = array('user_agent' => 'ua');
*/
$autoload['libraries'] = array('database');

/*
| -------------------------------------------------------------------
|  Auto-load Drivers
| -------------------------------------------------------------------
| These classes are located in system/libraries/ or in your
| application/libraries/ directory, but are also placed inside their
| own subdirectory and they extend the CI_Driver_Library class. They
| offer multiple interchangeable driver options.
|
| Prototype:
|
|	$autoload['drivers'] = array('cache');
|
| You can also supply an alternative property name to be assigned in
| the controller:
|
|	$autoload['drivers'] = array('cache' => 'cch');
|
*/
$autoload['drivers'] = array();

/*
| -------------------------------------------------------------------
|  Auto-load Helper Files
| -------------------------------------------------------------------
| Prototype:
|
|	$autoload['helper'] = array('url', 'file');
*/
$autoload['helper'] = array('url', 'smsmori');

/*
| -------------------------------------------------------------------
|  Auto-load Config files
| -------------------------------------------------------------------
| Prototype:
|
|	$autoload['config'] = array('config1', 'config2');
|
| NOTE: This item is intended for use ONLY if you have created custom
| config files.  Otherwise, leave it blank.
|
*/
$autoload['config'] = array();

/*
| -------------------------------------------------------------------
|  Auto-load Language files
| -------------------------------------------------------------------
| Prototype:
|
|	$autoload['language'] = array('lang1', 'lang2');
|
| NOTE: Do not include the "_lang" part of your file.  For example
| "codeigniter_lang.php" would be referenced as array('codeigniter');
|
*/
$autoload['language'] = array();

/*
| -------------------------------------------------------------------
|  Auto-load Models
| -------------------------------------------------------------------
| Prototype:
|
|	$autoload['model'] = array('first_model', 'second_model');
|
| You can also supply an alternative model name to be assigned
| in the controller:
|
|	$autoload['model'] = array('first_model' => 'first');
*/
$autoload['model'] = array();

 بر اساس کامنت های موجود در همین فایل

/**
   | These are the things you can load automatically:
   |
   | 1. Packages
   | 2. Libraries
   | 3. Drivers
   | 4. Helper files
   | 5. Custom config files
   | 6. Language files
   | 7. Models

*/

در صورتی که مقادیر مورد نظر در فایل تنظیم شود باعث لود فایل های مانند

  • پکیج ها Packages
  • کتابخانه ها Labraries
  • درایور ها Drivers
  • فایل های کمکی Helper files
  • فایل های کانفیگ سفارشی Custom config files
  • فایل های زبان Language file
  • مدل ها Models 

لود فایل های کمکی با استفاده از فایل autoload.php

برای استفاده از فایل های کمکی پرکاربرد که در اکثر نقاط از  برنامه شما استفاده می شود می توانید نام فایل کمکی خود را در متغییر $autoloader با اندیس helper را مشخص کنید.

$autoloader['helper'] = array('myhelper_helper', 'url');