- چهارشنبه 9 خرداد 1397 ساعت 15:48
- 3.1.9
- در حال تکمیل
- فعال
هنگامی که واژه "لایبرریها" را استفاده میکنیم، معمولا به کلاسهایی اشاره داریم که در دایرکتوری libraries قرار گرفتهاند و در بخش رفرنس کلاس این راهنما آنها را توضیح میدهیم. گرچه، در این پست، به منظور جدا نگهداشتن لوکال ریسورسها و گلوبال ریسورسهای فریمورک، به جای آن نحوه اینکه چگونه میتوانید لایبرری خودتان را در دایرکتوری application/libraries بسازید را توضیح میدهیم.
به عنوان یک نکته اضافه، اگر فقط نیاز به افزودن چند قابلیت به یک لایبرری موجود دارید، کدایگنایتر اجازه میدهد تا با لایبرریهای خود، کلاسهای نیتیو (بومی) آن را توسعه دهید. یا تنها با نامگذاری اسامی دقیقا مشابه، میتوانید آنها (لایبرریهای خود در دایرکتوری application/libraries) را جایگزین لایبرریهای نیتیو کدایگنایتر کنید.
به طور خلاصه:
- میتوانید لایبرریهای کاملا جدیدی بسازید.
- میتوانید لایبرریهای نیتیو را توسعه دهید.
- میتوانید لایبرریهای نیتیو را جایگزین کنید.
در ادامه این پست، به صورت جزئیتر به این سه مفهوم پرداخته میشود.
نکته
دقت کنید که کلاسهای دیتابیس قابل توسعه یا جایگزین کردن با کلاسهای شما نیستند. اما سایر کلاسها را میتوانید جایگزین کنید یا توسعه دهید.ذخیرهسازی
کلاس های لایبرری باید در دایرکتوری application/libraries قرار گیرد، زیرا اولین مکانی است که کدایگنایتر در هنگام راهاندازی به دنبال آنها میگردد.
قوانین نامگذاری
- نام فایل باید با حرف بزرگ شروع شود. برای مثال:
Myclass.php
- نام کلاس باید با حرف بزرگ شروع شود. برای مثال:
class Myclass
- کلاس و فایل حاوی آن باید همنام باشند.
فایل کلاس
کلاس ها باید با الگوی اولیه زیر مطابقت داشته باشند:
<?php
defined('BASEPATH') OR exit('No direct script access allowed');
class Someclass {
public function some_method()
{
}
}
نکته
از اسم Someclass صرفا به عنوان مثال استفاده کردیم.استفاده از کلاس شما
با استفاده از استاندارد زیر، از داخل هر متد کنترلر خود، میتوانید کلاس خود را تعریف کنید:
$this->load->library('someclass');
که در اینجا someclass فایل بدون پسوند فایل ".php" است. نام فایل را میتوانید با حروف بزرگ یا کوچک بنویسد. کدایگنایتر اهمیتی نمیدهد.
هنگامی که کلاس لود شود، با استفاده از شکل حروف کوچک نام کلاس، میتوانید به آن دسترسی داشته باشید:
$this->someclass->some_method(); // Object instances will always be lower case
ارسال پارامترها در هنگام لود اولیه کلاس
در هنگام لود هر لایبرری، میتوانید دادههای مورد نظرتان را به آن لایبرری ارسال کنید. برای اینکار، دادهها را به شکل یک آرایه به عنوان پارامتر دوم متد لود لایبرری (load->library
) تنظیم کنید. دادهها به متد __construct()
کلاس لایبرری مورد نظر پاس داده میشوند.
$params = array('type' => 'large', 'color' => 'red');
$this->load->library('someclass', $params);
اگر از این ویژگی استفاده کنید، باید متد constructor
کلاس خود را با توجه به دادههای مورد انتظارتان بازنویسی کنید:
<?php defined('BASEPATH') OR exit('No direct script access allowed');
class Someclass {
public function __construct($params)
{
// Do something with $params
}
}
پارامترهای ذخیره شده در یک فایل کانفیگ را نیز میتوانید ارسال کنید. تنها کافی است یک فایل کانفیگ همنام فایل کلاس ساخته و آن را در دایرکتوری application/config/ ذخیره کنید. دقت کنید که اگر پارامترها را با استفاده از این روش و به صورت داینامیک ارسال کنید، انتخاب فایل کانفیگ امکانپذیر نخواهند بود.
استفاده از ریسورسهای کدایگنایتر داخل کتابخانه شما
برای دسترسی به ریسورسهای نیتیو کدایگنایتر در داخل کتابخانه خود، از متد get_instance()
استفاده کنید. این متد سوپر آبجکت کدایگنایتر را برمیگرداند.
اصطلاحات فنی
سوپرآبجکت (Super Object) در کدایگنایتر، آبجکتی (شی) است که با استفاده از آن میتوان به هر ریسورس لود شدهای از کدایگنایتر دسترسی داشت.
معمولا هر متد قابل دسترسی کدایگنایتر را از داخل متد کنترلر، با استفاده از $this
میتوان فراخوانی کرد:
$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');
// etc.
گرچه $this
، فقط مستقیما داخل کنترلر، مدل یا ویو کار میکند. اگر تمایل به استفاده از کلاسهای کدایگنایتر داخل کلاسهای سفارشی خود دارید، میتوانید مراحل زیر را انجام دهید:
ابتدا، آبجکت کدایگنایتر را به یک متغییر تخصیص کنید:
$CI =& get_instance();
هنگامی که آبجکت را به یک متغییر نسبت دادید، میتوانید از آن متغییر به جای استفاده کنید:
$CI =& get_instance();
$CI->load->helper('url');
$CI->load->library('session');
$CI->config->item('base_url');
// etc.
نکته
اگر کمی دقت کرده باشید، متوجه خواهید شد که انتساب مقدار به متغییر $CI
به روش انتساب رفرنسی (=&
) بوده است.
$CI =& get_instance();
اینکار خیلی اهمیت دارد. انتساب رفرنسی؛ امکان استفاده از آبجکت اصلی کدایگنایتر را به جای کپی کردن از آن، به شما میدهد.
گرچه، از آنجایی که یک لایبرری در واقع یک کلاس است، بهتر است از تمام مزایای اصول شیگرایی استفاده کنید. بنابراین، به منظور قادر به استفاده بودن از سوپرآبجکت کدایگنایتر در تمام متدهای کلاس، پیشنهاد میکنیم به جای اینکار، انتساب رفرنسی سوپرآبجکت را در متد __construct()
و به یک پراپرتی (مثلا $CI
) تخصیص دهید:
class Example_library {
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()
{
echo $this->CI->config->item('base_url');
}
}
جایگزین کردن لایبرریهای شما با لایبرریهای نیتیو
به سادگی و با نامگذاری فایلهای کلاس، همنام با هر لایبرری نیتیو، کدایگنایتر به جای استفاده از لایبرری نیتیو مجبور به استفاده از لایبرری شما خواهد شد. برای استفاده از این قابلیت، باید کلاس و فایل حاوی کلاس لایبرری را دقیقا همنام با لایبرری نیتیو نامگذاری کنید. برای مثال، برای جایگزین کردن لایبرری خود با لایبرری نیتیو Email، یک فایل در دایرکتوری application/libraries/Email.php بسازید و کلاس را مطابق زیر در آن تعریف کنید:
class CI_Email {
}
توجه کنید که اکثر کلاسهای نیتیو کدایگنایتر دارای پیشوند CI_ هستند.
برای لود لایبرری خود، باید از متد استاندارد لود استفاده کنید:
$this->load->library('email');
نکته
در حال حاضر، امکان جایگزین کردن لایبرریهای سفارشی شما با کلاسهای دیتابیس وجود ندارد.
توسعه لایبرریهای نیتیو
اگر نیاز به افزودن چند قابلیت به یک لایبرری موجود دارد - شاید افزودن یک یا دو متد - در این صورت جایگزین کردن کل لایبرری شما با لایبرری نیتیو، عملی افراطی است. در این مورد بهتر است کلاس موجود را توسعه دهید. توسعه دادن یک کلاس تقریبا مشابه جایگزین کردن یک کلاس است، البته با دو استثنا:
- در هنگام تعریف کلاس دقت کنید که باید از کلاس والد خود مشتق شود زیرا در واقع کلاس نیتیو را توسعه میدهد.
- نام کلاس جدید شما و نام فایل حاوی آن باید دارای پیشوند MY_ باشند (این پیشوند قابل تنظیم و تغییر است. ادامه را مطالعه کنید.).
برای مثال، برای توسعه کلاس نیتیو Email، باید یک فایل در دایرکتوری application/libraries/MY_Email.php بسازید و کلاس را مطابق زیر در آن تعریف کنید:
class MY_Email extends CI_Email {
}
اگر میخواهید از متد __construct()
در کلاس خود استفاده کنید، حتما متد والد __construct()
را نیز در این متد فراخوانی کنید.
class MY_Email extends CI_Email {
public function __construct($config = array())
{
parent::__construct($config);
// Your own constructor code
}
}
نکته
همه لایبرریها دارای پارامتر یا پارامترهای یکسان در متد __construct()
خود نیستند. قبل از توسعه یک لایبرری، ابتدا به کدهای کلاس لایبرری مورد نظر خود نگاهی بیاندازید تا ببینید که چگونه باید پیادهسازی شود.
لود کلاسهای فرعی
برای لود کلاسهای فرعی خود، معمولا از سینتکس استانداردی استفاده میشود که قبلا برای لود کلاسهای لایبرری از آن استفاده کردهاید. همچنین پیشوندرا بکار نبرید. برای مثال، برای لود مثال بالا که کلاس Email را توسعه میدهد، از متد زیر استفاده کنید:
$this->load->library('email');
هنگامی که کلاس لود شد، میتوانید از آن مشابه سایر لایبرریها استفاده کنید. در مورد کلاس Email، تمام متدها با دستور زیر فراخوانی میشوند:
$this->email->some_method();
تنظیم پیشوند لایبرریهای شما
برای تنظیم پیشوند کلاس فرعی خود، فایل application/config/config.php را باز کنید و به دنبال خط زیر بگردید:
$config['subclass_prefix'] = 'MY_';
لطفا دقت کنید که پیشوند تمامی لایبرریهای نیتیو کدایگنایتر CI_ تعیین شده است، بنابراین نباید از آن به عنوان پیشوند استفاده کنید.
سایر پستهای داکیومنت
- به کدایگنایتر خوش آمدید
- نصب
- بررسی اجمالی
- شروع به استفاده از کدایگنایتر
- کدایگنایتر در یک نگاه
- فیچرهای کدایگنایتر
- فلوچارت اپلیکیشن
- مدل ویو کنترلر
- اهداف طراحی و معماری
- خودآموز
- مشارکت در کدایگنایتر
- نوشتن مستندات کدایگنایتر در صف ترجمه
- گواهی مبدأ توسعه دهنده 1.1 در صف ترجمه
- مباحث کلی
- URLها در کدایگنایتر
- کنترلرها
- نامهای رزرو شده
- ویوها
- مدلها
- هلپرفانکشنها
- استفاده از لایبرریهای کدایگنایتر
- ساخت لایبرری
- استفاده از درایورهای کدایگنایتر
- ساخت درایور
- ساخت کلاسهای هسته سیستم
- ساخت کلاسهای کمکی
- هوکها - توسعه هسته فریمورک
- بارگذاری خودکار ریسورسها
- فانکشنهای عمومی
- فانکشنهای سازگاری
- مسیریابی URI
- هندل کردن خطاها
- کش کردن صفحات وب
- ارزیابی و تجزیه و تحلیل عملکرد اپلیکیشن
- اجرای کدایگنایتر به وسیله خط فرمان
- مدیریت چندین اپلیکیشن
- هندل کردن محیطهای چندگانه
- سینتکس جایگزین PHP برای فایلهای ویو
- Security در صف ترجمه
- راهنمای کدنویسی در PHP
- لایبرریها در صف ترجمه
- کلاس بنچمارک
- درایور کش در صف ترجمه
- Calendaring Class در صف ترجمه
- Shopping Cart Class در صف ترجمه
- Config Class در صف ترجمه
- Email Class در صف ترجمه
- Encrypt Class در صف ترجمه
- Encryption Library در صف ترجمه
- File Uploading Class در صف ترجمه
- Form Validation در صف ترجمه
- FTP Class در صف ترجمه
- Image Manipulation Class در صف ترجمه
- Image Manipulation Class در صف ترجمه
- Javascript Class در صف ترجمه
- کلاس زبان
- Loader Class در صف ترجمه
- کلاس مایگریشن
- Output Class در صف ترجمه
- Pagination Class در صف ترجمه
- Template Parser Class در صف ترجمه
- Security Class در صف ترجمه
- Session Library در صف ترجمه
- HTML Table Class در صف ترجمه
- Trackback Class در صف ترجمه
- کلاس تایپوگرافی در صف ترجمه
- Unit Testing Class در صف ترجمه
- URI Class در صف ترجمه
- User Agent Class در صف ترجمه
- XML-RPC and XML-RPC Server Classes در صف ترجمه
- کلاس انکود کردن آرشیو Zip در صف ترجمه
- رفرنس دیتابیس در صف ترجمه
- شروع سریع دیتابیس: کد نمونه
- پیکربندی دیتابیس در صف ترجمه
- Connecting to your Database در صف ترجمه
- Queries در صف ترجمه
- Generating Query Results در صف ترجمه
- Query Helper Methods در صف ترجمه
- Query Builder Class در صف ترجمه
- Transactions در صف ترجمه
- Database Metadata در صف ترجمه
- فراخوانی سفارشی فانکشن
- Database Caching Class در صف ترجمه
- Database Forge Class در صف ترجمه
- Database Utility Class در صف ترجمه
- DB Driver Reference در صف ترجمه
- هلپرفانکشنها
- هلپرفانکشن Array
- هلپرفانکشن CAPTCHA در صف ترجمه
- هلپرفانکشن Cookie
- Date Helper در صف ترجمه
- هلپرفانکشن Directory
- Download Helper در صف ترجمه
- Email Helper در صف ترجمه
- File Helper در صف ترجمه
- هلپرفانکشن Form در صف ترجمه
- HTML Helper در صف ترجمه
- Inflector Helper در صف ترجمه
- هلپرفانکشن Language
- هلپرفانکشن Number
- Path Helper در صف ترجمه
- Security Helper در صف ترجمه
- Smiley Helper در صف ترجمه
- هلپرفانکشن String
- Text Helper در صف ترجمه
- Typography Helper در صف ترجمه
- URL Helper در صف ترجمه
- XML Helper در صف ترجمه