در جلسهی قبل پروژهای را ایجاد کردیم تا اطلاعات موجود در دیتابیس خود را با استفاده از فریمورک Codeigniter به کاربر نمایش دهیم. اما هر آنچه تا کنون یاد گرفتهاید مربوط به نمایش دادن دادهها بوده و تاکنون دادهی جدیدی را به بانکاطلاعاتی خود اضافه نکردهاید. در این جلسه روش درج رکوردهای جدید به دیتابیسی که در جلسهی پنجم ایجاد کرده بودیم را به شما آموزش خواهیم داد. بنابراین اگر قسمت قبلی این سری آموزشی را مطالعه نکردهاید ابتدا آن را به طور کامل تمرین کرده و سپس مباحث این جلسه را دنبال کنید. در ادامه با زومیت همراه باشید تا روش افزودن اطلاعات جدید به دیتابیس را از طریق فریمورک Codeigniter فرا بگیرید.
ایجاد فرم
به منظور افزودن دادههای جدید به بانک اطلاعاتی ابتدا باید فرمی را ایجاد کنید تا با استفاده از آن، اطلاعات را دریافت کرده و سپس آنها را ذخیره کنیم. از آنجا که هر رکورد از جدولی که در جلسهی قبل ایجاد کرده بودیم شامل عنوان و متن خبر میشود پس نیاز به فرمی خواهیم داشت که دو فیلد ورودی داشته باشد. در مسیر application/views/news فایلی به نام create.php ایجاد کرده و کدهای زیر را در آن قرار دهید.
<h2><?php echo $title; ?></h2>
<?php echo validation_errors(); ?>
<?php echo form_open('news/create'); ?>
<label for="title">Title</label>
<input type="input" name="title" /><br />
<label for="text">Text</label>
<textarea name="text"></textarea><br />
<input type="submit" name="submit" value="Create news item" />
</form>
در کد بالا احتمالا فقط دو مورد برای شما کمی نا آشنا اسـت. یکی ()forn_open و دیگری ()validation_errors که هر دو از توابع هلپرهای مربوط به ساخت کدهای HTML در فریمورک Codeigniter هستند.
تابع اول همانطور که اشاره کردیم مربوط به هلپر فرم بوده و در واقع کدهای مربوط به ایجاد فرم جدید را ایجاد کرده و قابلیتهای دیگری را نیز برای ما به ارمغان میآورد. تابع دوم نیز مربوط به نمایش خطاهای احتمالی مربوط به اعتبارسنجی دادههای ورودی در فیلدها اسـت.
فایل کنترلر news را که در جلسهی قبلی ایجاد کرده بودید باز کنید. در این کلاس شما باید دو کار انجام دهید: اول اینکه باید بررسی کنید که فرم ثبت شده و دوم اعتبارسنجی اطلاعات وارد شده در فیلدها. بدین منظور از کتابخانهی اعتبارسنجی فرم (form validation) استفاده میکنیم. کد کنترلر news را به صورت زیر تغییر دهید.
public function create()
$this->load->helper('form');
$this->load->library('form_validation');
$data['title'] = 'Create a news item';
$this->form_validation->set_rules('title', 'Title', 'required');
$this->form_validation->set_rules('text', 'Text', 'required');
if ($this->form_validation->run() === FALSE)
$this->load->view('templates/header', $data);
$this->load->view('news/create');
$this->load->view('templates/footer');
else
$this->news_model->set_news();
$this->load->view('news/success');
کد بالا قابلیتهای دیگری را به کنترلر ما اضافه خواهد کرد. ابتدا هلپر فرم و نیز کتابخانهی اعتبارسنجی فرم را بارگذاری میکنیم. سپس قوانین اعتبارسنجی اطلاعات ثبت شده در هر فیلد را تعیین کردهایم. متد یا تابع ()set_rules سه آرگومان ورودی دارد: اولین ورودی نام فیلد مورد نظر اسـت، دومین ورودی نامی که برای پیامهای خطا نیاز داریم خواهد بود و سومین آرگومان نیز قوانین مورد نظر ما برای اعتبارسنجی اسـت. در اینجا ما قصد داریم تا وارد کردن اطلاعات در دو فیلد عنوان و متن خبر را اجباری کنیم و در این شرایط کاربر نمیتواند رکورد خالی در دیتابیس ثبت کند.
همانطور که در کد بالا مشاهده میکنید، فریمورک Codeigniter کتابخانهی بسیار قدرتمندی برای اعتبارسنجی فرم در اختیار ما قرار میدهد. در مورد این کتابخانه در جلسات آینده به صورت کاملا مفصل صحبت خواهیم کرد. پس از تعیین قوانین با یک دستور شرطی if بررسی میکنیم که آیا اعتبارسنجی فرم با موفقیت انجام شده یا خیر. اگر فیلدها بر اساس قوانین تعیین شده توسط ما وارد نشده باشد، فرم ما مجددا نمایش خواهد یافت و اگر تمام قوانین در ورودیهای فرم رعایت شده باشد مدل مربوطه فراخوانی خواهد شد. پس از این مورد نیز فایلهای ویو یا نمای مربوطه برای نمایش پیام موفقیت آمیز بودن ثبت فرم اجرا میشوند. در این مرحله باید در مسیر application/views/news یک فایل جدید به نام success.php ایجاد کنید و سپس در این فایل عبارت مورد نظر خود را که قصد دارید پس از ثبت صحیح فرم به کاربر نمایش داده شود، وارد کنید.
مدل
تنها موردی که باقی مانده، نوشتن یک متد جدید برای افزودن اطلاعات وارد شده توسط کاربر به دیتابیس اسـت. بدین منظور از کلاس Query Builder استفاده خواهیم کرد. همچنین از کتابخانهی input به منظور دریافت اطلاعات ارسال شده به مدل بهره خواهیم برد. فایل مدلی که در جلسهی قبل ایجاد کرده بودید را باز کرده و سپس متد زیر را به آن اضافه کنید.
public function set_news()
$this->load->helper('url');
$slug = url_title($this->input->post('title'), 'dash', TRUE);
$data = array(
'title' => $this->input->post('title'),
'slug' => $slug,
'text' => $this->input->post('text')
);
return $this->db->insert('news', $data);
این متد اطلاعات ثبت شده در فرم را که عملیات اعتبارسنجی روی آنها در مرحلهی قبل انجام شده را به بانک داده ما اضافه خواهد کرد. خط سوم کد بالا یک تابع جدید به نام ()url_title دارد که از متدهای هلپر URL فریمورک مورد بحث اسـت. این متد فواصل خالی بین کلمات را با علامت خطفاصله (-) جایگزین خواهد کرد. این کار برای تبدیل عنوان وارد شده به slug یا همان نامک خاص خبر به کار گرفته شده اسـت. علاوه بر این، متد ()url_title تمامی کاراکترهای وارد شده را به حروف کوچک تبدیل میکند تا نامک هر خبر به بهترین شکل ممکن درآید.
سپس دادههای دریافت شده از کنترلر را برای ثبت در دیتابیس آماده کردهایم. ایندکس هر عضو از آرایهی data$ دقیقا باید با نام فیلد نگهدارندهی اطلاعات وارد شده یکسان باشد. مقدار هر عضو از این آرایه نیز همانطور که مشاهده میکنید برابر با دادهای اسـت که کاربر در فیلد مربوط به آن وارد کرده اسـت. در این بخش احتمالا متوجه متد جدید ()post نیز شدهاید. این متد یکی از توابع کتابخانهی input بوده و با استفاده از آن، دادههای وارد شده در فرم از نظر امنیتی بررسی میشوند. لازم به ذکر اسـت که کتابخانهی input به صورت پیشفرض در کل فریمورک بارگذاری شده و نیازی به بارگذاری مجدد آن نداریم. در نهایت در کد بالا اطلاعات آرایهی data$ را به دیتابیس اضافه میکنیم.
نکته: اگر خوب دقت کرده باشید هر رکورد از جدول اخبار ما شامل ۴ فیلد بود: id، title، slug و text. فیلد id به صورت خودکار با اضافه شدن هر رکورد یک واحد افزایش مییابد و این خاصیت اسـت که هنگام ساخت جدول برای این فیلد تعریف کردهایم تا شناسهی آیدی هر خبر منحصر به فرد باشد. title و text نیز به ترتیب برای عنوان و متن خبر مورد استفاده قرار میگیرند و slug نیز نامک اختصاصی هر خبر اسـت که در ادامه بیشتر در مورد آن صحبت میکنیم. اما فرم ما فقط شامل دو فیلد دو که یکی برای عنوان و دیگری برای متن خبر اختصاص داده شدهاند. مقدار slug نیز همان عنوان خواهد بود با این تفاوت که برای این بخش، اطلاعات وارد شده در فیلد عنوان را همانطور که در بالا اشاره کردیم، با تابع ()url_title بهینهسازی کردیم.
مسیردهی
پیش از اینکه بتوانید به اپلیکیشن Codegniter خود رکورد جدید بیافزایید، باید در فایل config/routes.php تغییراتی ایجاد کنید. در واقع باید قوانین جدیدی را به این فایل اضافه کنیم. اطمینان حاصل کنید که فایل یاد شده شامل کدهای زیر نیز باشد. با استفاده از این کدها، مسیردهی مورد نظر برای دسترسی به بخش ثبت خبر جدید را برای فریمورک تعریف میکنیم.
$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';
علاوه بر آنچه گفته شد، با ویرایش config/routes.php روش مشاهدهی هر خبر به صورت تکی را با استفاده از slug آن آماده کردهایم.
حال نرمافزار سرور مجازی Xampp را اجرا کرده و سپس دو سرور آپاچی و مایاسکیوال را در حالت فعال قرار دهید. سپس وارد آدرس http://127.0.0,1/codei-dynamic/index.php/news/create شوید. اگر همه مراحل را به درستی انجام داده باشید، فرم مربوط به ثبت خبر جدید برای شما نمایان خواهد شد که میتوانید با استفاده از آن، رکوردهای جدید را به دیتابیس خود اضافه کنید.
در جلسات آینده شما را با تکتک کتابخانهها و کلاسهای آمادهی فریمورک Codeigniter آشنا خواهیم کرد و قابلیتهای هر کلاس را به صورت مفصل به شما آموزش میدهیم. در نهایت تمام این آموخته را با یک پروژهی عملی به پایان خواهیم رساند که در آن پروژه، همهی مباحث مطرح شده را استفاده خواهیم کرد.
اگر در مورد مباحث مطرح شده در این جلسه سوال یا پیشنهادی دارید لطفا آن را از طریق بخش نظرات با زومیت و سایر کاربران به اشتراک بگذارید.