آشنایی با کدایگنایتر - بخش سوم
مدل ها
ایجاد مدل
برای انجام آسان عملیات CRUD[1] و گرفتن نتیجه از query ها، میتوان برای هر موجودیت[۲] یک مدل طراحی کرد. نام کلاس باید متناظر با نام فایل باشد و از کلاس CI_Model توسعه داده شود. مثال:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
class app_model extends CI_Model { public function __construct() { parent::__construct(); $this->load->model("entity_model"); } Function remove($id){ … } } |
فراخونی مدل
برای فراخوانی متدهای مدل به ترتیب زیر عمل میکنیم:
1 2 3 |
$this->load->model(‘app_lib’); $this->app_lib->remove(1231); |
کلاس شخصی entity_model
برای عملیات ساده در پایگاه داده که نیازی به query های پیچیده ندارد، کلاس entity_model طراحی گردیده و مشتمل بر متدهای زیر است:
1 |
get_row($condition) |
با توجه به شروط داده شده، یک ستون بر می گرداند. از این متد وقتی استفاده میکنیم ک مطمئن هستیم خروجی فقط و فقط یک رکورد است، مثلا زمانی که میخواهیم اطلاعات یک کاربر را با استفاده از شناسه کاربری واکشی[۳] نماییم. در غیر این صورت، جواب حاوی اولین رکورد از لیست خروجی query خواهد بود.
نکته: متغیر $condition از نوع آرایه بوده و هر ردیف آن باید شامل ستون نام فیلد و ستون مقدار باشد. مانند مثال زیر:
نکته: برای انتخاب پایگاه داده از متغیر table_name استفاده میکنیم.
1 2 3 4 5 6 7 8 9 10 11 |
$condition= array( ‘userId’ => ‘12735172’, ‘fName’=> ‘saleh’, ‘lName’ =>’movahed’ ‘email’ => ‘saleh.movahedi@gmail.com’ ); |
get($condition)
لیستی از رکورد ها را با توجه به شروط داده شده، بر می گرداند. مثال:
1 2 3 4 5 |
$this->load->model(‘entity_model’); $this-> entity_model->table_name = ’users’; $this-> entity_model->get($condition); |
set()
با توجه به ورودی داده شده یک رکورد در پایگاه داده ذخیره میکند.
نکته: قبلا از استفاده از متد Set()، باید مقادیر جدید را در آرایه بنام $data_set ریخته شود (درست مانند متغیر$condition) .
edit($condition)
رکوردهای متناظر با آرایه condition را با مقادیری که در آرایه data_edit ریخته ایم، بروز میکند. مثال:
1 2 3 4 5 6 7 8 9 |
$this-> entity_model->data_edit = array( ‘password’ => 123456 ‘user_role’ => ‘admin’ ) ; $this-> entity_model->edit($array( ‘userId’ => 1231)); |
remove($condition = array()
رکوردهای متناظر با شرط داده شده را حذف میکند.
count_all()
تعداد دکوردهای یک جدول را برمیگرداند.
insert_id()
آخرین مقدار تخصیص داده شده یه کلید اصلی[۴] را بر میگرداند
last_query()
آخرین query اجرا شده را بر میگرداند
یاری رسان ها[۵]
برخلاف کتابخانه ها که کلاس هستند، یاری رسان ها مجموعه ای از توابع کاربردی هستند که برای برنامه نویس سهولت بیشتری در کد نویس ایجاد میکنند.
برای استفاده از یاری رسان ها، ابتدا باید بارگذاری شوند و بعد از آن قابل دسترسی هستند. چنانچه استفاده زیادی از یاری رسان ها میکنید، میتوانید آنها را از طریق فایل پیکربندی autoload فراخوانی کنید که همیشه بطور خودکار فراخوانده شود.
به عنوان مثال متد Site_url() درون یاری رسان url است.
1 2 3 |
$this->load->helper(‘url’); Echo site_url(); |
تایید هویت
برای تایید هویت کاربران، کلاس sessions ایجاد شده است که شامل توابع login و logout است.
تابع login اطلاعات مورد نظر را در متغیر user_data نگه داری میکند.
اگر نحوه ی دریافت اطلاعات کاربراز پایگاه داده را بشرح زیر در نظر بگیریم،
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
$this->entity_model->table_name = "users"; $user = $this->entity_model->get_row( array( 'username' => $username, "_pass" => $password) ); $user_data = array( "userId" => $user['userId'], "username" => $user['username'], "name" => $user['name'], //"user_role" => $user['user_role'], ); |
پس: نحوه ذخیره این اطلاعات در session variable به نحو زیر است:
1 |
$this->session->set_userdata('user_data', $user_data); |
برای دستیابی به این اطلاعات ن نحو زیر عمل میکنیم:
1 2 3 |
$user = $this->session->userdata('user_data'); Echo $user[‘userId’]; |
تاریخ شمسی
برای استفاده از تاریخ شمسی باید کلاس کتابخانه jdatetime را در در پوشه librariesکپی کنیم و با دستور زیر آنرا فراخوانی کنیم.
1 |
$this->load->libraries("jdatetime",null,"jdatetime"); |
کد زیر تاریخ شمسی را بصورت “روز/ماه/سال/ دقیقه:ساعت روز هفته” نمایش میدهد.
1 |
$this->jdatetime-> date("l H:i - Y/m/d", now()); |
نمایش
برای نمایش صفحات ابتدا باید یک فایل php که حاوی کدهای HTML میباشد را درون پوشه view ایجاد کرد. مثلا فایل my_view.php در آدرس زیر ایجاد میکنیم:
Applition/view/my_view.php
سپس از طریق دستور زیر آنرا بارگذاری کرد:
1 |
$this->load->virew(‘my_view’); |
نکته: نام فایل نمایشی باید بدون ذکر “php” باشد.
برای ارسال اطلاعات به فایل نمایش میتوانیم بصورت زیر، اطلاعات را انتقال دهیم:
1 |
$this->load->virew(‘my_view’, $data); |
که $data حاوی هر نوع داده ای میتواند باشد.
اعتبارسنجی اطلاعات ارسالی از فرما ها
مقادیر GET و POST به ترتیب از طریق دستورات زیر قابل خواندن هستند:
1 2 3 |
$this->input->get(‘GET نام فیلدی از نوع پست’); $this->input->post(‘POSTنام فیلدی از نوع ); |
اگر این دستورات بدون ذکر نام فیلد استفاده شوند، تمامی مقادیر GET یا POST بصورت آرایه برگردانده میشود.
برای اعتبارسنجی یک فیلد باید برای آن ضابطه تعریف کرد. مثال:
1 |
$this->form_validation->set_rules("نام فیلد", "نامی نمایشی", "فیلترهای اعتبارسنجی"); |
سپس با دستور زیر درستی این ضابطه ها کنترل میشود:
1 |
$this->form_validation->run() |
خروجی یک مقدار Boolean میباشد و تنها زمانی TRUE برگردانده میشود که تمامی فیلدها، از همه فیلترهای اعتبارسنجی خود را بدرستی عبور کرده باشند.
مثال:
1 |
$this->form_validation->set_rules("name", "نام", "trim|required|is_unique[users.name]"); |
متد form_validation->run() فقط هنگامی مقدار TRUE برمیگرداند که مقدار آن حتما پر شده باشد، و در جدول user دارای مقدار name منحصربفردی باشد. همچنین تابعی مثل trim جنبه اعتبار سنجی ندارد و فقط مقدار فیلد را trim میکند.
در صورتی که خطا داشته باشیم میتوانیم بصورت زیر خطای مربوط به فیلد را در قسمت نمایش نمایش دهیم.
1 |
Echo form_error(‘نام فیلد’); |
میتوان تمامی خطاها را در یک متغیر به صورت زیر جمع آوری کنیم و آنها را به بکباره در قسمت نمایش، نمایش داد. ارسال $data برای فایل نمایشی، الزامی است.
1 2 3 4 5 6 7 8 9 10 11 |
$data['validation_error_msg'] = ”” ; if ($this->form_validation->run() === FALSE) { $data['validation_error_msg'] .= (form_error('name')) ? form_error('name') . "</br>" : ""; $data['validation_error_msg'] .= (form_error('username')) ? form_error('username') . "</br>" : ""; $data['validation_error_msg'] .= (form_error('password')) ? form_error('password') . "</br>" : ""; $data['validation_error_msg'] .= (form_error('confpass')) ? form_error('confpass') . "</br>" : ""; |
منابع
- http://ellislab.com/codeigniter/user-guide/
[۱] Create Read Update Delete
[۲] Entity
[۳] fetch
[۴] Primary key
[…] قبلی بعدی […]