در دو جلسهی قبل شما را با فریمورک Codeigniter و ساختار اپلیکیشنهایی که با این فریمورک توسعه داده میشوند، آشنا کردیم. در این جلسه ابتدا پیکربندیهای اولیه را برای آدرسها انجام میدهیم و سپس کار با بانک اطلاعاتی را آغاز خواهیم کرد.
شما تاکنون با نصب و راهاندازی اولیهی این فریمورک آشنا شدهاید. در ادامه قصد داریم ساختار اولین اپلیکیشنی که قصد داریم با Codeigniter بسازیم را پیکربندی کنیم. بدین منظور باید به پوشهی application/config مراجعه کنید که شامل تمامی فایلهای مورد نیاز برای تنظیمات فریمورک اسـت. با زومیت همراه باشید.
پیکربندی آدرس URL پایه
آدرس پایه URL یک سایت را باید با ویرایش فایل application/config/config.php تنظیم کرد. این آدرس در واقع محل قرارگیری تمامی فایلهای فریمورک تلقی میشود که در وبسایتها عموما همان آدرس اصلی سایت خواهد بود. دقت کنید که باید در آخر آدرس پایه، حتما یک اسلش (/) قرار دهید. به عنوان مثال میتوان به آدرس زیر اشاره کرد.
http://example.com/
اگر این بخش تنظیم نشود، CodeIgniter خود سعی میکند تا پروتکل، آدرس دامین و محل قرارگیری محل نصب فریمورک را بیابد. در هرحال همیشه بهترین کار این اسـت که خودتان این مشخصه را تنظیم کرده و به حدس خودکار فریمورک بسنده نکنید. این مورد بخصوص در تولید اپلیکیشنهایی که برای دیگران توسعه میدهید بسیار مهم اسـت. برای تنظیم این مقدار باید در آرایهی config$ مقدار base_url را تغییر دهید. در زیر میتوانید این بخش را که در فایل application/config/config.php قرار دارد مشاهده کنید.
$config['base_url'] = 'http://your-domain.com';
از آنجا که ما قصد داریم این پروژه را در همان محل نصب اولیه که در جلسه اول توضیح دادیم، ایجاد کنیم، پس مقدار آدرس فوق به شکل زیر خواهد بود:
$config['base_url'] = 'http://127.0.0.1/codei/';
پیکربندی بانکداده
پیکربندی بانک داده را در جلسهی اول برای شما توضیح دادیم. حال یک بانک داده جدید در سرور محلی Xampp ایجاد کرده و مشخصات آن را همانند مثال زیر تنظیم کنید. در اینجا نام بانک اطلاعاتی ما zoomit اسـت.
$db['default'] = array(
'dsn' => '',
'hostname' => 'localhost',
'username' => 'root',
'password' => '',
'database' => 'zoomit',
'dbdriver' => 'mysqli',
'dbprefix' => '',
'pconnect' => TRUE,
'db_debug' => TRUE,
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array()
);
همانطور که پیشتر نیز اشاره کرده بودیم، در سرور محلی، نیازی به تنظیم مقدار رمزعبور کاربر بانک داده نخواهید داشت و نام کاربری بانک داده نیز در سرور یاد شده عموما root اسـت مگر اینکه خودتان آن را تغییر داده باشید. آدرس سرور نیز localhost خواهد بود. یک بخش دیگر که باید تنظیم شود نوع بانک داده (dbdriver) اسـت و از آنجا که ما قصد استفاده از mysqli را داریم بنابراین مقدار آن را mysqli تعیین کردهایم.
نکته: فریمورک Codeigniter از بانکهای دادهی MySQL, MySQLi, Postgre SQL, ODBC و MS SQL پشتیبانی میکند.
پیکربندی اجرای خودکار
این فایل تعیین میکند که چه سیستمهایی باید به صورت پیشفرض بارگذاری شوند. با این کار، میتوان فریمورک را تا جایی که میشود سبک کرد. باید اشاره کنیم در حالت پیشفرض فقط تعداد کمی از منابع بهطور خودکار بارگذاری میشوند. شما باید به جای اجرای محلی سیستمها، موارد پر استفاده را در حالت بارگذاری خودکار قرار دهید.
موارد ذکر شده در زیر را میتوان به طور خودکار بارگذاری کرد.
- کتابخانهها ( Libraries) - یکسری از کتابخانهها را باید به صورت پیشفرض در حالت بارگذاری خودکار (Autoload) قرار داد. بدین منظور باید لیست کتابخانههای مورد نظر را به صورت آرایه و مانند مثال زیر، ارائه دهید تا Codeigniter آنها را به صورت پیشفرض اجرا کند. در مثال زیر ما کتابخانههای database (بانک داده) و email (ایمیل) و نیز session ها را در حالت Autoload قرار دادهایم.
$autoload['libraries'] = array('database', 'email', 'session');
- درایورها (Drivers) - این کلاسها در مسیر system/Libraries یا application/Libraries قرار گرفتهاند. کلاسهای بخش اپلیکیشن در زیر پوشههای دو مسیر فوق نیز قرار گرفته و از کلاس CI_Driver_Library ارثبری میکنند. این کلاسها گزینهی قابل تغییر درایوها را ارائه میدهند. در ادامه مثالی برای Autoload کردن درایورهای cache آوردهایم.
$autoload['drivers'] = array('cache');
- فایلهای هلپر (Helper files) - لیستی از فایلهای هلپر را میتوان در حالت بارگذاری خودکار قرار داد. مانند مثال زیر، لیستی از کتابخانههای مورد نظر خود را به صورت یک آرایه ارائه کنید تا Codeigniter آنها را به صورت پیشفرض، اجرا کند. در ادامه مثالی برای این مورد آوردهایم. در این مثال، قصد داریم هلپرهای URL و file را در حالت Autoload قرار دهیم.
$autoload['helper'] = array('url', 'file');
- فایلهای کانفیگ سفارشی (Custom config files) - این فایلها توسط خود شما تولید میشوند و فقط در صورتی که فایل کانفیگ سفارشی ایجاد کردهاید میتوانید آن را در حالت Autoload قرار دهید در غیر این صورت این بخش را خالی بگذارید. در ادامه روش بارگذاری خودکار چند فایل کانفیگ را در قالب یک مثال مشاهده میکنید:
$autoload['language'] = array('lang1', 'lang2');
- فایلهای زبان (Language files) - لیستی از فایلهای زبان مورد نظر که قصد دارید آنها را در حالت Autoload قرار دهید را همانند مثال زیر ارائه کنید. توجه داشته باشید برای اضافه کردن فایلهای زبان نباید بخش lang_ را در نام آن تایپ کنید. به عنوان مثال codeigniter_lang.php به زبانی به نام codeigniter اشاره دارد. به مثال زیر توجه کنید:
$autoload['language'] = array('lang1', 'lang2');
- مدلها (Models) - بدین منظور باید لیستی از مدلهای مورد نظر که قصد Autoload کردن آنها را دارید ارائه دهید. روش بارگذاری خودکار مدلها نیز مثل دیگر فایلهای اشاره شده در بالا بوده و باید به صورت آرایه آن را بنویسید. به مثال زیر توجه کنید:
$autoload['model'] = array('first_model', 'second_model')
تا به اینجای کار شما با ساختار فریمورک مورد بحث کاملا آشنا شدهاید، ساختار اپلیکیشنهایی که با این فریمورک ساخته میشود را کاملا درک کردهاید و نیز روش اعمال تنظیمات اولیه را فرا گرفتهاید.
اولین مثال در فریمورک Codeigniter
حال برای تکمیل تمامی مباحث مطرح شده در این جلسه و دو جلسهی قبل یک مثال عملی را شروع میکنیم.
تنظیمات و آمادهسازی فریمورک
برای شروع نرمافزار زمپ را اجرا کرده و سرور آپاچی و مایاسکیوال آن را در حالت فعال قرار دهید. سپس در پوشهی htdocs یک پوشه به نام zoomit بسازید. در بالا روش Autoload کردن را به شما آموزش دادیم. اساسا این کار برای مواقعی اسـت که قصد دارید از یک کلاس خاص به طور دائم در پروژهی خود استفاده کنید. از آنجا که در اینجا قصد داریم مثالی از کار با بانک داده را به شما آموزش دهیم پس نیاز خواهیم داشت تا کلاس اصلی آن که در مسیر application/config/database.php قرار گرفته را در حالت Autoload قرار دهیم. بانک دادهای که در ادامه قصد داریم آن را بسازیم، helloworld نام خواهد داشت. برای ساخت این بانک داده به آدرس http://127.0.0.1/phpmyadmin رفته و مطابق آنچه در آموزشهای پیاچپی توضیح داده بودیم، یک بانک اطلاعاتی جدید با نام helloworld بسازید. سپس در بخش sql، کد زیر را وارد کنید تا جداول مربوطه و اطلاعات پیشفرض بانک داده به آن اضافه شود.
CREATE TABLE `data` (
`id` int(11) NOT NULL auto_increment,
`title` varchar(255) NOT NULL,
`text` text NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=2 ;
INSERT INTO `data` (`id`, `title`, `text`) VALUES(1, 'Hello World!', 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nulla
sapien eros, lacinia eu, consectetur vel, dignissim et, massa. Praesent suscipit nunc vitae neque. Duis a ipsum. Nunc a erat. Praesent
nec libero. Phasellus lobortis, velit sed pharetra imperdiet, justo ipsum facilisis arcu, in eleifend elit nulla sit amet tellus.
Pellentesque molestie dui lacinia nulla. Sed vitae arcu at nisl sodales ultricies. Etiam mi ligula, consequat eget, elementum sed,
vulputate in, augue. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae;');
حال باید فایل کانفیگ دیتابیس را که در مسیر application/config/database.php قرار دارد، باز کرده و آن را مثل زیر ویرایش کنید. دقت کنید نام کاربر بانک داده root بوده و رمزعبور نیز ندارد.
$db['default']['hostname'] = "localhost";
$db['default']['username'] = "root";
$db['default']['password'] = "";
$db['default']['database'] = "helloworld";
$db['default']['dbdriver'] = "mysql";
همچنین به منظور Autoload کردن کلاس بانک داده باید فایل application/config/autoload.php باز کنید و سپس کلاس database را همانند زیر در آرایههای بخش libraries قرار دهید.
$autoload['libraries'] = array('database');
تغییر کنترلر پیشفرض فریمورک
تا اینجای کار اگر مراحل را درست انجام داده باشید، با اجرای http://127.0.0.1/zoomit صفحهی خوشآمدگویی پیشفرض فریمورک Codeigniter را مشاهده خواهید کرد. کنترلر پیشفرض اجرا شده توسط فریمورک، welcome.php نام دارد که در مسیر application/controllers قرار دارد. این فایل را حذف کرده و فایل application/config/routes.php را باز کنید. آرایهای که کلید آن default_controller اسـت را به صورت زیر تغییر داده و مقدار آن را helloworld قرار دهید.
$route['default_controller'] = "Helloworld"
برای اجرای صحیح این کنترلر در فریمورک CI (از این پس برای اختصار، کلمهی Codeigniter را با CI مشخص میکنیم.) نیاز به یک فایل نما یا ویو نیز خواهید داشت. این فایلها همانطور که در جلسات قبل گفتیم به منظور نمایش بخش رابط کاربری به کار رفته و در مسیر application/view قرار داده میشوند. در این مسیر فایل welcome_message.php را نیز حذف کنید.
ساخت مدل Helloworld
ساخت مدلها در CI اجباری نیست اما بهتر اسـت استفاده از آنها را تمرین کنید. مدلها در واقع کلاسهای پیاچپی محسوب میشوند که شامل توابعی برای بازگشت دادن اطلاعات از بانکهای داده هستند. به مسیر application/models رفته و فایلی به نام helloworld_model.php را ایجاد کنید. در این فایل، یک کلاس به نام Helloworld_model ایجاد کرده و سپس تابع کانستراکتور و نیز یک تابع به نام getData برای دریافت اطلاعات را در آن ایجاد میکنیم. ما قصد داریم تا در تابع getData از توابع Active Record بانک داده استفاده کنیم چراکه این روش باعث افزایش دادن سرعت توسعهی کدهای مرتبط با دیتابیس در هنگام کار با CI خواهد شد. یکی از مزایای فریمورکها همین مورد اسـت و میتوان با استفاده از توابع ساده شده، کوئریهای مورد نظر را اجرا کرد. کدهای زیر را در فایل مدل Helloworld_model.php قرار دهید:
<?php
class
Helloworld_model
extends
Model
function
Helloworld_model()
parent::Model();
function
getData()
$query
=
$this
->db->get(
'data'
);
if
(
$query
->num_rows() > 0)
else
return
$query
->result();
?>
ساخت کنترلر Helloworld
حال اجازه دهید کنترلر مورد نیاز برای این مثال را ایجاد کنیم. این کنترلر اطلاعات را به فایل ویو (نما) ارسال کرده و مدل مربوط به خود را نیز اجرا میکند. در مسیر application/controllers یک فایل جدید به نام helloworld.php ایجاد کنید. نام فایل بدون پسوند php. بسیار مهم اسـت و بعدا مفصلا در مورد ساختار نامگذاری کنترلرها و مدلها و ویوها در فریمورک CI بحث خواهیم کرد. ساختن این کنترلر باعث میشود تا با اجرای آدرس http://127.0.0.1/zoomit/index.php/helloworld این کنترلر اجرا شود. دقت کنید که نام helloworld دقیقا نام فایل کنترلر اسـت. در فایل helloworld.php یک کلاس ایجاد کرده که نام این کلاس باید با نام فایل یکسان باشد. همچنین باید در این کلاس یک تابع به نام index ایجاد کنید. این تابع هنگامی که آدرس http://127.0.0.1/zoomit/index.php/helloworld اجرا شود، فراخوانی خواهد شد. علاوه بر این نام توابع را میتوان در ادامهی آدرس فوق اضافه کرد. به عنوان مثال اگر در کنترلر helloworld، تابعی به نام foo داشته باشیم، با اجرای آدرس http://127.0.0.1/zoomit/index.php/helloworld/foo میتوانیم تابع یاد شده را فراخوانی کنیم. شیوهی نامگذاری و ساختار آدرس URL در فریمورک CI به شکل زیر اسـت:
http://host/codeignitordirectory/index.php/class/function.
در تابع index کنترلر باید مدلهای مورد نظر را اجرا کرده و کوئریهای مورد نیاز به دیتابیس را نیز اجرا و سپس نتیجهی آنها را به فایلهای ویوو مربوطه ارسال کنیم. برای اجرای هر منبعی مثل کتابخانهها (Libraries)، هلپرها، ویووها یا مدلها در CI باید از load class استفاده کنیم. پس از اجرای یک مدل میتوان به توابع آن دسترسی داشت. به منظور ارسال دادهها به فایل ویوو باید اطلاعات را در قالب یک آرایه تنظیم کرده و سپس آن آرایه را ارسال کنیم. کدهای زیر را در فایل کنترلر helloworld.php قرار دهید:
<?php
class
Helloworld
extends
Controller
function
index()
$this
->load->model(
'helloworld_model'
);
$data
[
'result'
] =
$this
->helloworld_model-><span
class
=
"sql"
>getData</span>();
$data
[
'page_title'
] =
"CI Hello World App!"
;
$this
->load->view(
'helloworld_view'
,
$data
);
?>
اگر در این مرحله به آدرس http://127.0.0.1/zoomit/index.php/helloworld مراجعه کنیم، پروژه ما کار نخواهد کرد (تصویر زیر) چرا که هنوز فایلهای مربوط به نمای سایت یا همان Viewها را ایجاد نکردهایم.
ایجاد فایل نمای Helloworld
فایل ویوو در واقع همان چیزی اسـت که کاربر آن را مشاهده کرده و در صورت لزوم با آن تعامل خواهید کرد. فایل نما میتواند شامل یک بخش کوچک از صفحه یا کل صفحه باشد. شما میتوانید مجموعهای از آرایهها را از طریق آرگومان دوم تابع اجرای مدل، به فایل ویوو مورد نظر خود ارسال کنید. به منظور ایجاد فایل نمای این پروژه در مسیر application/view فایلی به نام helloworld_view.php ایجاد کنید. در این فایل باید کدهای معمولی اچتیامال را نوشته و سپس با کدهای پیاچپی ساده، دادههایی که به صورت آرایه به این فایل ارسال شده را در جایگاهی مناسب از فایل ویوو قرار دهیم تا نهایتا به کاربر نمایش داده شوند. در آموزش پیاچپی با حلقهی foreach آشنا شدید. در اینجا قصد داریم دادههای ارسال شده توسط کنترلر به این فایل ویوو را از طریق این حلقه به نمایش درآوریم. فایل helloworld_view.php را باز کرده و کدهای زیر را در آن قرار دهید:
<
html
>
<
head
>
<
title
><?=$page_title?></
title
>
</
head
>
<
body
>
<?
php
foreach($result as $row):?>
<
h3
><?=$row->title?></
h3
>
<
p
><?=$row->text?></
p
>
<
br
/>
<?
php
endforeach;?>
</
body
>
</
html
>
ما از ساختاری شبیه به ساختار پیاچپی استفاده کردهایم چراکه این روش کارایی بالایی داشته و در وقت نیز صرفهجویی خواهد شد.
حال اگر آدرس http://127.0.0.1/zoomit/index.php/helloworld را در مرورگر خود اجرا کنید، پروژه شما باید به خوبی کار کند.
نکات ضروری: اگر پیش از این با mvc و فریمورکهای دیگر کار نکرده باشید، شاید محتویات این جلسه برای شما کمی گنگ باشد ولی در این مورد جای نگرانی وجود ندارد. این اولین مثال عملی شما در فریمورک Codeigniter بوده و رفته رفته با انجام تمرینهای بیشتر و مطالعهی جلسات آیندهی این سری آموزشی، به طور کامل به این کدها مسلط خواهید شد.
سعی کنید این جلسه را همزمان با مطالعه به صورت عملی نیز انجام دهید تا مباحث مطرح شده بهتر در ذهن شما ثبت شوند. در پایان اگر سوال یا مشکلی در مورد این جلسه دارید آن را از طریق بخش نظرات با ما در میان بگذارید.