هلپرفانکشن‌ها

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

هلپرفانکشن‌ها همانطور که از نام آن‌ها مشخص است، فانکشن‌هایی هستند که در انجام تسک‌ها به شما کمک می‌کنند. هر فایل هلپر، مجموعه‌ای از فانکشن‌ها است که در یک دسته‌بندی خاص قرار می‌گیرند. برای مثال هلپرهای URL به شما در ساخت URLها کمک می‌کند، هلپرهای Form امکان ساخت عناصر فرم را فراهم می‌کنند، هلپرهای Text عملیات مختلف برای فرمت‌دهی متن را اجرا می‌کنند، هلپرهای Cookie کار تنظیم و خواندن کوکی‌ها را انجام می‌دهند و هلپرهای File در هنگام کار با فایل‌ها به کمک شما می‌آیند. در کدایگنایتر برخلاف اغلب سیستم‌های دیگر، به صورت شی‌گرا نوشته نشده‌اند. هر هلپرفانکشن یک تسک خاص را انجام می‌دهد و هیچ وابستگی به فانکشن‌های دیگر ندارد. کدایگنایتر فایل‌های مربوط به هلپرفانکشن‌ها را به صورت پیش‌فرض لود نمی‌کند، بنابراین اولین قدم در استفاده از یک هلپر، لود آن است. هنگامی که هلپر مورد نظر لود شد، در تمام کنترلرها و ویوهای برنامه قابل استفاده است. هلپرها معمولا در دایرکتوری system/helpers یا application/helpers ذخیره می‌شوند. کدایگنایتر ابتدا در دایرکتوری application/helpers به دنبال هلپر مشخص شده می‌گردد، اگر پیدا نکرد سپس دایرکتوری system/helpers را بررسی می‌کند.

بارگذاری یک هلپر

لود یک هلپر به سادگی و با استفاده از متد زیر امکان‌پذیر است:

$this->load->helper('name');

پارامتر name نام هلپر است که بدون اکستنشن .php و _helper استفاده می‌شود. برای مثال برای لود هلپر URL که نام فایل آن url_helper.php است از متد زیر استفاده می‌شود:

$this->load->helper('url');

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

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

بارگذاری چندین هلپر

اگر نیاز به لود چندین هلپر دارید، آن‌ها را در یک آرایه قرار دهید.

$this->load->helper(
        array('helper1', 'helper2', 'helper3')
);

بارگذاری خودکار هلپرها

اگر نیاز به لود هلپر خاصی در کل اپلیکیشن دارید، باید به کدایگنایتر بگویید آن هلپر را در هنگام راه‌اندازی اولیه سیستم لود کند. برای اینکار فایل application/config/autoload.php را باز کنید و هلپر مورد نظر را به آرایه autoload اضافه کنید.

استفاده از هلپر

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

<?php echo anchor('blog/comments', 'Click Here');?>

در این مثال یک لینک ساخته می‌شود که متن آن Click Here است و کلیک روی آن متد comments از کنترلر blog را فراخوانی می‌کند.

توسعه‌ی هلپرها

برای توسعه‌ی هلپرها، یک فایل در پوشه application/helpers با نامی یکسان با نام هلپر موجود بسازید، البته باید اول نام آن پیشوند MY_ را اضافه کنید. (این نام پیشوند قابل تنظیم و تغییر است.) اگر قصد دارید قابلیت‌هایی به هلپر موجود اضافه کنید یا نحوه عملکرد یک فانکشن خاص را تغییر دهید. بهتر است به جای ویرایش فایل هلپر موچود، آن را توسعه دهید.

نکته: واژه توسعه (extend) در اینجا بدون قاعده استفاده شده است، زیرا هلپرفانکشن‌ها رویه‌گرا و مجزا هستند و طبق مفاهیم مرسوم در برنامه‌نویسی قابل توسعه نیستند. این قابلیت امکان افزودن و بازنویسی فانکشن‌های یک هلپرفانکشن را فراهم می‌کند.

برای مثال، برای توسعه‌ی هلپر Array باید یک فایل با نام application/helpers/MY_array_helper.php بسازید و فانکشن‌های موردنظرتان را اضافه یا بازنویسی کنید.

// any_in_array() is not in the Array Helper, so it defines a new function
function any_in_array($needle, $haystack)
{
        $needle = is_array($needle) ? $needle : array($needle);

        foreach ($needle as $item)
        {
                if (in_array($item, $haystack))
                {
                        return TRUE;
                }
        }

        return FALSE;
}

// random_element() is included in Array Helper, so it overrides the native function
function random_element($array)
{
        shuffle($array);
        return array_pop($array);
}

پیشوند خودتان را تنظیم کنید

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

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

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

بارگذاری یک هلپر

لود یک هلپر به سادگی و با استفاده از متد زیر امکان‌پذیر است:

$this->load->helper('name');

پارامتر name نام هلپر است که بدون اکستنشن .php و _helper استفاده می‌شود. برای مثال برای لود هلپر URL که نام فایل آن url_helper.php است از متد زیر استفاده می‌شود:

$this->load->helper('url');

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

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

بارگذاری چندین هلپر

اگر نیاز به لود چندین هلپر دارید، آن‌ها را در یک آرایه قرار دهید.

$this->load->helper(
        array('helper1', 'helper2', 'helper3')
);

بارگذاری خودکار هلپرها

اگر نیاز به لود هلپر خاصی در کل اپلیکیشن دارید، باید به کدایگنایتر بگویید آن هلپر را در هنگام راه‌اندازی اولیه سیستم لود کند. برای اینکار فایل application/config/autoload.php را باز کنید و هلپر مورد نظر را به آرایه autoload اضافه کنید.

استفاده از هلپر

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

<?php echo anchor('blog/comments', 'Click Here');?>

در این مثال یک لینک ساخته می‌شود که متن آن Click Here است و کلیک روی آن متد comments از کنترلر blog را فراخوانی می‌کند.

توسعه‌ی هلپرها

برای توسعه‌ی هلپرها، یک فایل در پوشه application/helpers با نامی یکسان با نام هلپر موجود بسازید، البته باید اول نام آن پیشوند MY_ را اضافه کنید. (این نام پیشوند قابل تنظیم و تغییر است.) اگر قصد دارید قابلیت‌هایی به هلپر موجود اضافه کنید یا نحوه عملکرد یک فانکشن خاص را تغییر دهید. بهتر است به جای ویرایش فایل هلپر موچود، آن را توسعه دهید.

نکته: واژه توسعه (extend) در اینجا بدون قاعده استفاده شده است، زیرا هلپرفانکشن‌ها رویه‌گرا و مجزا هستند و طبق مفاهیم مرسوم در برنامه‌نویسی قابل توسعه نیستند. این قابلیت امکان افزودن و بازنویسی فانکشن‌های یک هلپرفانکشن را فراهم می‌کند.

برای مثال، برای توسعه‌ی هلپر Array باید یک فایل با نام application/helpers/MY_array_helper.php بسازید و فانکشن‌های موردنظرتان را اضافه یا بازنویسی کنید.

// any_in_array() is not in the Array Helper, so it defines a new function
function any_in_array($needle, $haystack)
{
        $needle = is_array($needle) ? $needle : array($needle);

        foreach ($needle as $item)
        {
                if (in_array($item, $haystack))
                {
                        return TRUE;
                }
        }

        return FALSE;
}

// random_element() is included in Array Helper, so it overrides the native function
function random_element($array)
{
        shuffle($array);
        return array_pop($array);
}

پیشوند خودتان را تنظیم کنید

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

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

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

منبع
Helper Functions