- جمعه 4 خرداد 1397 ساعت 07:08
- 3.1.9
- در حال تکمیل
- فعال
حالا نحوه خواندن دادهها از دیتابیس با کمک کدایگنایتر را میدانید، اما هنوز اطلاعاتی را در دیتابیس وارد نکردهاید. در این بخش مدل و کنترلر news و مدل را که قبلا ساختهاید را توسعه خواهید داد تا این قابلیتها به آن اضافه شود.
ساخت یک فرم
برای وارد کردن دادهها به دیتابیس، نیاز به ساخت یک فرم دارید که با کمک آن میتوانید اطلاعات ورودی را ذخیره کنید. این بدین معنی است که شما به یک فرم با دو فیلد، یک فیلد برای عنوان و فیلد دیگر برای متن خبر نیاز دارید. اسلاگ را از عنوان در مدل میتوانید استخراج کنید. یک ویو جدید در دایرکتوری 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>
در این کد فقط دو مورد وجود دارد که شاید ناشناخته به نظر آیند: فانکشن form_open()
و فانکشن validation_errors()
.
فانکشن اول توسط هلپر form ارائه شده است و عناصر فرم را رندر میکند و قابلیتهایی مانند افزودن یه فیلد جلوگیری از CSRF به آن اضافه میکند. فانکشن دوم برای گزارشگیری از خطاهای مرتبط با اعتبارسنجی فرم استفاده میشود.
به کنترلر News
برگردید. میخواهید دو مورد را در اینجا اضافه کنید، بررسی اینکه فرم سابمیت (Submit) شده و بررسی اینکه دادههای سابمیت شده با قوانین اعتبارسنجی مچ بوده و تست ولیدیشن را با موفقیت پاس میکنند. برای این کار از لایبرری form validation استفاده خواهید کرد.
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');
}
}
کد بالا قابلیتهای زیادی را اضافه میکند. اولین خطوط، هلپر form و لایبرری validation را لود میکنند. پس از آن، قوانین مورد نظر برای اعتبارسنجی فرم تعیین میشوند. متد set_rules()
سه آرگومنت میگیرد؛ نام فیلد input، نامی که در پیامهای خطا استفاده میشود، و قانون. در این مورد فیلدهای عنوان و متن ضروری هستند.
همانطور که در بالا مشاهده کردید، کدایگنایتر لایبرری فرم ولیدیشن قدرتمندی دارد. (بزودی پست مربوط به این کتابخانه را ترجمه خواهیم کرد و لینک آن را در این قسمت قرار میدهیم.)
در ادامه کد بالا، یک شرط را میتوانید ببینید که بررسی میکند که آیا اعتبارسنجی فرم با موفقیت انجام شده است یا خیر. اگر اعتبارسنجی با موفقیت انجام نشود، فرم نمایش داده خواهد شد، اما اگر دادههای سابمیت شده با موفقیت قوانین اعتبارسنجی را پاس کنند، مدل فراخوانی میشود. پس از آن، یک ویو برای نمایش پیام موفقیت در انجام عملیات لود میشود. یک ویو در دایرکتوری 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 - کاراکترهای مخرب را حذف میکند، تمام فاصلهها را با دَش (-) جایگزین میکند و به کمک پارامتر سوم، همه کاراکترها را به شکل کوچک تبدیل میکند. خروجی این فانکشن یک اسلاگ عالی و مناسب برای استفاده در URLها است.
ادامه کار را با آمادهسازی رکوردی شروع میکنیم که قرار است بعدا از طریق آرایه $data
وارد دیتابیس شود. هر عنصر آرایه با یک ستون در تیبل news مرتبط است. احتمالا متوجه شدهاید که متد جدیدی با نام post()
در اینجا شدهاید که متعلق به لایبرری input است. این متد دیتا را از فیلتری برای حذف دادههای غیرمجاز میگذراند، و جلوی حملات مخرب دیگران را میگیرد. لایبرری input به صورت پیشفرض لود میشود. در نهایت، آرایه $data
به دیتابیس وارد میشود.
مسیریابی
قبل از اینکه بتوانید شروع به اضافه کردن آیتمهای خبری به اپلیکیشن کدایگنایتر خود کنید، باید قوانین مسیریابی جدید به فایل config/routes.php اضافه کنید. بررسی کنید که فایل شما شامل قوانین زیر باشد. خط اول که جدید است، باعث میشود کدایگنایتر به این URL به شکل یک آیتم خبری نگاه نکند، یعنی 'create' را یک اسلاگ از آیتم خبری در نظر نگیرد.
$route['news/create'] = 'news/create';
$route['news/(:any)'] = 'news/view/$1';
$route['news'] = 'news';
$route['(:any)'] = 'pages/view/$1';
$route['default_controller'] = 'pages/view';
حالا به وسیله مرورگر خود URLهای ایجاد شده در این بخش را تست کنید، برای مثال به انتهای مسیر دایرکتوری مربوط به کدایگنایتر در محیط توسعه لوکال کامپیوتر خود را index.php/news/create اضافه کنید. تبریک میگوییم، شما با موفقیت اولین اپلیکیشن خود را با کدایگنایتر ساختید! چند خبر اضافه کنید و صفحات مختلفی که ساختهاید را بازدید و بررسی کنید.
سایر پستهای داکیومنت
- به کدایگنایتر خوش آمدید
- نصب
- بررسی اجمالی
- شروع به استفاده از کدایگنایتر
- کدایگنایتر در یک نگاه
- فیچرهای کدایگنایتر
- فلوچارت اپلیکیشن
- مدل ویو کنترلر
- اهداف طراحی و معماری
- خودآموز
- مشارکت در کدایگنایتر
- نوشتن مستندات کدایگنایتر در صف ترجمه
- گواهی مبدأ توسعه دهنده 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 در صف ترجمه