17-07-1395، 10:49 ق.ظ
مدلها
Model ها درصورت تمایل میتونن برای کسانی که دوست دارن از ساختار سنتی MVC پیروی کنن، قابل استفاده هستن.
مدل چیه؟
مدلها کلاسهای PHP هستن که برای کار با اطلاعات در پایگاه دادههای شما طراحی میشن. برای مثال فرض کنین از کداینگایتر برای مدیریت به وبلاگ استفاده میکنین. ممکنه بخواین یه کلاس مدل داشته باشین که شامل توابعی برای درج، بروزرسانی و استخراج مطالب وبلاگ شما باشه. در اینجا مثالی از چنین کلاس مدلی رو مشاهده میکنین:
ساختار داخلی یک مدل
کلاسهای مدل در مسیر application/models ذخیره میشن و میتونن داخل پوشههای فرعی هم درصورت نیاز به نظم بیشتر قرار داده بشن. الگوی اولیهی یه کلاس مدل اینطوریه:
که باید بجای Model_name اسم کلاستون رو باید بنویسید. اسم کلاس باید با حرف اول بزرگ نوشته بشه و بقیهی حروف کوچک هستن. مطمئن بشین که کلاستون از کلاس پایهی CI_Model مشتق میشه. اسم فایل باید با اسم کلاس یکی باشه. برای مثال اگه کلاس شما دارای چنین محتوایی باشه:
باید فایلش در مسیر application/model/User_model.php ذخیره بشه.
بارگذاری یک مدل
مدلهای شما معمولاً توسط متدهای داخل کنترلر بارگذاری و فراخوانی میشن. برای بارگذاری یه مدل، از این دستور استفاده میکنیم:
اگه مدل شما توی یه پوشهی فرعی باشه، باید اسم مسیر نسبی اون رو هم اعلام کنین. برای مثال اگه مدل شما در مسیر application/models/blog/Queries.php باشه، با این دستور اون رو بارگذاری میکنین:
وقتی که مدل بارگذاری شد، ازطریق یه شئ همنام با اسم کلاستون میتونین بهش دسترسی داشته باشین. برای مثال:
اگه میخواین مدلتون به یه شئ با اسم دیگه نسبت داده بشه، میتونین از پارامتر دوم متد بارگذاری استفاده کنین:
در اینجا یه مثال از یه کنترلر رو میبینید که یه مدل رو بارگذاری میکنه و بعد هم از یه ویو استفاده میکنه:
بارگذاری خودکار مدلها
اگه احساس میکنین نیاز به این دارین که یه مدل خاص توی کل برنامه شما موجود باشه، میتونین از CodeIgniter بخواین که اون رو درزمان آمادهسازی اولیه سیستم بطور خودکار بارگذاری کنه. اینکار با ویرایش فایل application/config/autoload.php و اضافهکردن مدل به آرایهی $autoload['model'] انجام میشه.
اتصال به دیتابیس
وقتی که یه مدل بارگذاری میشه، بطور خودکار به دیتابیس متصل نمیشه. گزینههای زیر برای اتصال به دیتابیس در دسترس شما هستن:
Model ها درصورت تمایل میتونن برای کسانی که دوست دارن از ساختار سنتی MVC پیروی کنن، قابل استفاده هستن.
مدل چیه؟
مدلها کلاسهای PHP هستن که برای کار با اطلاعات در پایگاه دادههای شما طراحی میشن. برای مثال فرض کنین از کداینگایتر برای مدیریت به وبلاگ استفاده میکنین. ممکنه بخواین یه کلاس مدل داشته باشین که شامل توابعی برای درج، بروزرسانی و استخراج مطالب وبلاگ شما باشه. در اینجا مثالی از چنین کلاس مدلی رو مشاهده میکنین:
<?php class Blog_model extends CI_Model { public $title; public $content; public $date; public function __construct() { // Call the CI_Model constructor parent::__construct(); } public function get_last_ten_entries() { $query = $this->db->get('entries', 10); return $query->result(); } public function insert_entry() { $this->title = $_POST['title']; // Please read the below note $this->content = $_POST['content']; $this->date = time(); $this->db->insert('entries', $this); } public function update_entry() { $this->title = $_POST['title']; $this->content = $_POST['content']; $this->date = time(); $this->db->update('entries', $this, array('id' => $_POST['id'])); } }
نقل قول:نکته: متدهای مثال بالا از متدهای موجود در کلاس کوئریساز دیتابیس استفاده میکنن. بهمنظور سادگی، در این مثال ما مستقیماً از آرایهی $_POST استفاده کردیم. این موضوع کلاً خوب نیست و روش رایجتری که باید بکار بره، استفاده از کتابخانهی ورودی هست: $this->input->post('title')
ساختار داخلی یک مدل
کلاسهای مدل در مسیر application/models ذخیره میشن و میتونن داخل پوشههای فرعی هم درصورت نیاز به نظم بیشتر قرار داده بشن. الگوی اولیهی یه کلاس مدل اینطوریه:
class Model_name extends CI_Model { public function __construct() { parent::__construct(); } }
که باید بجای Model_name اسم کلاستون رو باید بنویسید. اسم کلاس باید با حرف اول بزرگ نوشته بشه و بقیهی حروف کوچک هستن. مطمئن بشین که کلاستون از کلاس پایهی CI_Model مشتق میشه. اسم فایل باید با اسم کلاس یکی باشه. برای مثال اگه کلاس شما دارای چنین محتوایی باشه:
class User_model extends CI_Model { public function __construct() { parent::__construct(); } }
باید فایلش در مسیر application/model/User_model.php ذخیره بشه.
بارگذاری یک مدل
مدلهای شما معمولاً توسط متدهای داخل کنترلر بارگذاری و فراخوانی میشن. برای بارگذاری یه مدل، از این دستور استفاده میکنیم:
$this->load->model('model_name');
اگه مدل شما توی یه پوشهی فرعی باشه، باید اسم مسیر نسبی اون رو هم اعلام کنین. برای مثال اگه مدل شما در مسیر application/models/blog/Queries.php باشه، با این دستور اون رو بارگذاری میکنین:
$this->load->model('blog/queries');
وقتی که مدل بارگذاری شد، ازطریق یه شئ همنام با اسم کلاستون میتونین بهش دسترسی داشته باشین. برای مثال:
$this->load->model('model_name'); $this->model_name->method();
اگه میخواین مدلتون به یه شئ با اسم دیگه نسبت داده بشه، میتونین از پارامتر دوم متد بارگذاری استفاده کنین:
$this->load->model('model_name', 'foobar'); $this->foobar->method();
در اینجا یه مثال از یه کنترلر رو میبینید که یه مدل رو بارگذاری میکنه و بعد هم از یه ویو استفاده میکنه:
class Blog extends CI_Controller { public function index() { $this->load->model('blog_model'); $data['query'] = $this->blog->get_last_ten_entries(); $this->load->view('blog', $data); } }
بارگذاری خودکار مدلها
اگه احساس میکنین نیاز به این دارین که یه مدل خاص توی کل برنامه شما موجود باشه، میتونین از CodeIgniter بخواین که اون رو درزمان آمادهسازی اولیه سیستم بطور خودکار بارگذاری کنه. اینکار با ویرایش فایل application/config/autoload.php و اضافهکردن مدل به آرایهی $autoload['model'] انجام میشه.
اتصال به دیتابیس
وقتی که یه مدل بارگذاری میشه، بطور خودکار به دیتابیس متصل نمیشه. گزینههای زیر برای اتصال به دیتابیس در دسترس شما هستن:
- میتونین با کمک متدهای استاندارد دیتابیس که اینجا توضیح داده شده، به دیتابیس وصل بشین (چه داخل کنترلر و چه داخل کلاس مدل)
- میتونین به متد بارگذاری مدل بگین که بطور خودکار وصل بشه. اینکار با کمک پارامتر اختیاری سوم و مقدار TRUE انجام میشه. تنظیمات اتصال به دیتابیس توی فایل config/database.php تعریف شده و از همونجا میتونین ویرایش کنین
$this->load->model('model_name', '', TRUE);
- میتونین بصورت دستی تنظیمات اتصال رو ازطریق پارامتر سوم بصورت آرایه ارسال کنین:
$config = array( 'hostname' => 'localhost', 'username' => 'myusername', 'password' => 'mypassword', 'database' => 'mydatabase', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => TRUE, ); $this->load->model('model_name', '', $config);