در سری اول آموزش فریمورک کدایگنایتر به معرفی این فریمورک محبوب صحبت کردیم.در مقاله ی قبلی دیدیم که چطور میتوانیم کدایگنایتر را دانلود و نصب کنیم و سپس به نحوه ی استفاده و کدنویسی از فریمورک کدایگنایتر پرداختیم که برای آشنایی با فریمورک کدایگنایتر ( codeigniter ) پیشنهاد میکنیم حتما مطلب قبلی را مطالعه کرده باشید.
در این سری از آموزش فریمورک کدایگنایتر به آموزش ساختن سیستم ثبت نام و ورود در فریمورک کدایگنایتر بپردازیم.
خب بیایید شروع کنیم.
فکر میکنم شما هم با جمله ی زیر موافق هستید.
ساختن سیستم ثبت نام و ورود با سطح دسترسی های متفاوت در کدایگنایتر بسیار سخت است.
خب اگر با جمله ی بالا موافق باشید خبر خوب این است که در این آموزش مشکل شما بصورت کامل حل میشود و در ادامه به آموزش ساختن ثبت نام و ورود کاربران با سطح دسترسی های مختلف با فریمورک کدایگنایتر خواهیم پرداخت.
برای ساختن سیستم ثبت نام و ورود با فریمورک کدایگنایتر میتوانیم از کتابخانه ی session ها در این فریمورک استفاده خواهیم کرد
سشن ( session ) ها یک سری متغیرهای ذخیره شده در سمت سرور هستند که اطلاعاتی را درون خودشان نگهداری میکنند. این محل ذخیره سازی بصورت فایل است و برای استفاده از آن در فریمورک کدایگنایتر از یک کلاس از پیش نوشته شده استفاده میشود.
ابتدا ممکن است پیچیده به نظر برسد ولی استفاده از آن بسیار راحت است.
فعلا در همین اندازه کافیست و در ادامه با نحوه ی کار کردن با سشن های فریمورک کدایگنایتر بیشتر آموزش خواهیم داد.
در ادامه بصورت قدم به قدم پیش خواهیم رفت.
این قدم بسیار مهم است اگر این قدم را درست انجام ندهید یعنی فریمورک کدایگنایتر را به درستی آماده سازی نکنید ممکن است در ادامه ی آموزش به مشکل بخورید پس در این مرحله دقت کافی داشته باشید.
پس این مرحله را هرگز رد نکنید و تمام نیازمندی ها برای آماده سازی این آموزش را مطالعه کنید و انجام دهید.
در زیر لیستی از مواردی که برای این پروژه باید آماده سازی کنید را نوشته ایم :
در این آموزش از پایگاه داده mysql استفاده خواهیم کرد و پیشنهاد میشود شما هم برای آموزش از این دیتابیس استفاده کنید.
هر چند شما میتوانید از دیتابیس های دیگری همچون Oracle, SQL Server یا Maria DB نیز استفاده کنید.
مسئله ای نیست.
برای این آموزش کدایگنایتر بهتر است شما با سینتکس زبان SQL یا کوئری نویسی با اس کیو ال آشنا باشید.
بعد از اینکه پایگاه داده ی خود را آماده کردید یک دیتابیس بسازید به نام login_db و اگر دیتابیسی دقیقا با این نام بسازید برای ادامه ی آموزش خوب است.
برای ساختن پایگاه داده جدید میتوانید از کدکوئری زیر نیز استفاده کنید :
CREATE DATABASE login_db;
این دستور یک پایگاه داده به نام login_db برای شما میسازد. بعد از این که پایگاه داده ایجاد شد یک جدول جدیدی به نام tbl_users بسازید که ساختارش مشابه تصویر زیر است :
برای ساختن جدولی با ساختار بالا کافیست کوئری زیر را اجرا کنید :
CREATE TABLE tbl_users( user_id INT PRIMARY KEY AUTO_INCREMENT, user_name VARCHAR(20), user_email VARCHAR(60), user_password VARCHAR(40), user_level VARCHAR(3) );
سپس با استفاده از کوئری زیر یک سری اطلاعات وارد جدول tbl_users انجام دهید.
INSERT INTO tbl_users (user_name,user_email,user_password,user_level) VALUES ('M Fikri','fikrifiver97@gmail.com',MD5('123456'),'1'), ('Daria','email2@gmail.com',MD5('123456'),'2') ('Jhon','email3@gmail.com',MD5('123456'),'3');
قبلا سایت رسمی کدایگنایتر را معرفی کردیم و باید به سایت اصلی کدایگنایتر مراجعه کنید و آخرین نسخه ی انرا که یک فایل فشرده شده است دانلود کنید. پس از دانلود کردن کدایگنایتر فایل زیپ شده آنرا از حالت زیپ خارج کنید و در مسیر www ( اگر از wamp استفاده میکنید ) و یا در مسیر htdocs ( اگر از xampp استفاده میکنید ) کپی کنید.
در این مقاله ی آموزشی چون از wamp استفاده میکنم فایل زیپ شده را در مسیر c:/wamp/www/ از حالت زیپ خارج میکنم . البته فرقی ندارد شما از wamp یا xamp یا سیستم عامل های دیگری مثل مک و لینوکس استفاده کنید ( مطمئنا بعنوان توسعه دهنده ی وب با این مبانی آشنا هستید).
سپس نام فولدر کدایگنایتر که در مسیر سرور خود قرار دادید را به login تغییر نام دهید.
پوشه ی login را باز کنید و یک پوشه ی جدید دیگری به نام assets ایجاد کنید و قرار است فایل های جانبی مثل فریمورک بوت استرپ و ... را اینجا قرار دهیم.
پروژه ی ما بعد از ساختن فولدر باید مشابه تصویر زیر باشد. شما میتوانید از هر code editor یا ide استفاده کنید تا فولدر را باز کنید.
در تصویر بالا مشاهده میکنید که درون فولدر assets دو عدد فولدر دیگر به نام های js و css ایجاد کرده ایم که درون آنها فایل های css و فایل های js را قرار خواهیم داد.
دو فایل bootstrap.min.css و bootstrap.min.js مربوط به فریمورک بوت استرپ است.
قدم بعدی که باید انجام دهید تنظیمات اولیه فریمورک کدایگنایتر است. چندین فایل وجود دارد که باید تنظیمات لازم را درون آنها انجام دهید که در زیر آمده است :
1. Autoload.php
برای دسترسی به این فایل تنظیماتی از کدایگنایتر باید در پروژه ی خود به مسیر زیر مراجعه کنید :
application/config/autoload.php
مسیر این فایل را در تصویر زیر نیز مشاهده میکنید :
فایل autoload.php را باز کنید برای باز کردن میتوانید از هر کدادیتوری مثل gedit یا notepad یا sublime استفاده کنید.
سپس کدهای زیر را درون این فایل تنظیماتی پیدا کنید :
$autoload['libraries'] = array(); $autoload['helper'] = array();
و آنها را بصورت زیر تغییر دهید :
$autoload['libraries'] = array('database', 'session'); $autoload['helper'] = array('url');
2. Config.php
برای پیدا کردن این فایل تنظیماتی در فریمورک کدایگنایتر به مسیر زیر بروید :
application/config/config.php
در تصویر زیر نیز مسیر این فایل را در فریمورک کدایگنایتر مشاهده میفرمایید.
فایل config.php را باز کنید و در بین محتویات آن کد زیر را پیدا کنید :
$config['base_url'] = '';
سپس تنظیمات بالا را به شکل زیر تغییر دهید :
$config['base_url'] = 'http://localhost/login/';
3. Database.php
برای تنظیم کردن دیتابیس در فریمورک کدایگنایتر به مسیر زیر در پروژه ی خود مراجعه کنید :
application/config/database.php
در تصویر زیر مسیر این فایل را در بین فایل های کدایگنایتر مشاهده میکنید :
این فایل را باز کنید و کدهای زیر را پیدا کنید :
$active_group = 'default'; $query_builder = TRUE; $db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => '', 'password' => '', 'database' => '', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
و به شکل زیر تنظیم کنید :
$active_group = 'default'; $query_builder = TRUE; $db['default'] = array( 'dsn' => '', 'hostname' => 'localhost', 'username' => 'root', 'password' => '', 'database' => 'login_db', 'dbdriver' => 'mysqli', 'dbprefix' => '', 'pconnect' => FALSE, 'db_debug' => (ENVIRONMENT !== 'production'), 'cache_on' => FALSE, 'cachedir' => '', 'char_set' => 'utf8', 'dbcollat' => 'utf8_general_ci', 'swap_pre' => '', 'encrypt' => FALSE, 'compress' => FALSE, 'stricton' => FALSE, 'failover' => array(), 'save_queries' => TRUE );
کنترلرها در mvc و کدایگنایتر بین view و model های شما نقش بازی میکند و کار اصلی آنها کنترل کردن اپلیکیشن شماست.
در این آموزش ما دو عدد کنترلر به نام های Login.php و Page.php خواهیم ساخت.
در ابتدا یک فایل کنترلر جدید در مسیر controllers/Login.php بسازید و کدهای زیر را درون آن بنویسید :
<?php class Login extends CI_Controller{ function __construct(){ parent::__construct(); $this->load->model('login_model'); } function index(){ $this->load->view('login_view'); } function auth(){ $email = $this->input->post('email',TRUE); $password = md5($this->input->post('password',TRUE)); $validate = $this->login_model->validate($email,$password); if($validate->num_rows() > 0){ $data = $validate->row_array(); $name = $data['user_name']; $email = $data['user_email']; $level = $data['user_level']; $sesdata = array( 'username' => $name, 'email' => $email, 'level' => $level, 'logged_in' => TRUE ); $this->session->set_userdata($sesdata); // access login for admin if($level === '1'){ redirect('page'); // access login for staff }elseif($level === '2'){ redirect('page/staff'); // access login for author }else{ redirect('page/author'); } }else{ echo $this->session->set_flashdata('msg','Username or Password is Wrong'); redirect('login'); } } function logout(){ $this->session->sess_destroy(); redirect('login'); } }
سپس یک فایل کنترلر جدید دیگری در مسیر controllers/Page.php بسازید و کدهای زیر را درون آن بنویسید :
<?php class Page extends CI_Controller{ function __construct(){ parent::__construct(); if($this->session->userdata('logged_in') !== TRUE){ redirect('login'); } } function index(){ //Allowing akses to admin only if($this->session->userdata('level')==='1'){ $this->load->view('dashboard_view'); }else{ echo "Access Denied" } } function staff(){ //Allowing akses to staff only if($this->session->userdata('level')==='2'){ $this->load->view('dashboard_view'); }else{ echo "Access Denied" } } function author(){ //Allowing akses to author only if($this->session->userdata('level')==='3'){ $this->load->view('dashboard_view'); }else{ echo "Access Denied" } } }
در بحث mvc و فریمورک کدایگنایتر مدل ها با دیتابیس شما ارتباط دارند و توابع مدل ها به شما کمک میکند تا بتوانید عملیات واکشی ، بروزرسانی ، حذف و درج اطلاعات را در پایگاه داده انجام دهید.
در این آموزش ما یک مدل به نام Login_model.php میسازیم.
بنابراین یک فایل مدل کدایگنایتری در پروژه ی خود در مسیر models/Login_model.php بسازید و کدهای زیر را درون آن بنویسید :
<?php class Login_model extends CI_Model{ function validate($email,$password){ $this->db->where('user_email',$email); $this->db->where('user_password',$password); $result = $this->db->get('tbl_users',1); return $result; } }
view فایل هایی در فریمورک کدایگنایتر هستند که رابط کاربری یا ظاهر نهایی سایت را که به کاربران بازدید کننده از سایت نمایش داده میشود را میسازند.
یک view میتواند یک صفحه ی ساده ی وب باشد یا مخلوطی از چند فایل مثل header و footer باشد یا یک خبرخوان RSS و ... .
در این پروژه ما دو فایل view میسازیم یکی login_view.php برای نمایش دادن فرم لاگین و دیگری dashboard_view.php بعنوان صفحه ی داشبورد این پروژه .
بنابراین ابتدا یک فایل view جدید در مسیر views/login_view.php بسازید که برای فرم لاگین استفاده خواهد شد و کدهای زیر را درون آن بنویسید :
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Sign In</title> <link href="<?php echo base_url('assets/css/bootstrap.min.css');?>" rel="stylesheet"> </head> <body> <div class="container"> <div class="col-md-4 col-md-offset-4"> <form class="form-signin" action="<?php echo site_url('login/auth');?>" method="post"> <h2 class="form-signin-heading">Please sign in</h2> <?php echo $this->session->flashdata('msg');?> <label for="username" class="sr-only">Username</label> <input type="email" name="email" class="form-control" placeholder="Email" required autofocus> <label for="password" class="sr-only">Password</label> <input type="password" name="password" class="form-control" placeholder="Password" required> <div class="checkbox"> <label> <input type="checkbox" value="remember-me"> Remember me </label> </div> <button class="btn btn-lg btn-primary btn-block" type="submit">Sign in</button> </form> </div> </div> <!-- /container --> <script src="<?php echo base_url('assets/js/bootstrap.min.js');?>"> </body> </html>
دومین فایل view را در مسیر views/dashboard_view.php بسازید و کدهای زیر را درون آن بنویسید :
<!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <title>Welcome</title> <link href="<?php echo base_url('assets/css/bootstrap.min.css');?>" rel="stylesheet"> </head> <body> <div class="container"> <div class="row"> <nav class="navbar navbar-default"> <div class="container-fluid"> <div class="navbar-header"> <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar" aria-expanded="false" aria-controls="navbar"> <span class="sr-only">Toggle navigation</span> <span class="icon-bar"></span> <span class="icon-bar"></span> <span class="icon-bar"></span> </button> <a class="navbar-brand" href="#">LOGO</a> </div> <div id="navbar" class="navbar-collapse collapse"> <ul class="nav navbar-nav"> <!--ACCESS MENUS FOR ADMIN--> <?php if($this->session->userdata('level')==='1'):?> <li class="active"><a href="#">Dashboard</a></li> <li><a href="#">Posts</a></li> <li><a href="#">Pages</a></li> <li><a href="#">Media</a></li> <!--ACCESS MENUS FOR STAFF--> <?php elseif($this->session->userdata('level')==='2'):?> <li class="active"><a href="#">Dashboard</a></li> <li><a href="#">Pages</a></li> <li><a href="#">Media</a></li> <!--ACCESS MENUS FOR AUTHOR--> <?php else:?> <li class="active"><a href="#">Dashboard</a></li> <li><a href="#">Posts</a></li> <?php endif;?> </ul> <ul class="nav navbar-nav navbar-right"> <li><a href="<?php echo site_url('login/logout');?>">Sign Out</a></li> </ul> </div><!--/.nav-collapse --> </div><!--/.container-fluid --> </nav> <div class="jumbotron"> <h1>Welcome Back <?php echo $this->session->userdata('username');?></h1> </div> </div> </div> <script src="<?php echo base_url('assets/js/bootstrap.min.js');?>"> </body> </html>
در این پروژه قصد داریم کنترلر login را بعنوان کنترلر پیشفرض پروژه ی خود انتخاب کنیم که هنگام ورود به سایت ابتدا فرم لاگین نمایش داده شود.
برای تنظیم کردن کنترلر پیشفرض در فریمورک codeigniter به تنظیمات آن در مسیر application/config/routes.php مراجعه کنید. مسیر این فایل در تصویر زیر نیز نشان داده شده است:
در این فایل دنبال کدهای زیر بگردید و پیدا کنید :
$route['default_controller'] = 'welcome'; $route['404_override'] = ''; $route['translate_uri_dashes'] = FALSE;
و آنها را بصورت زیر تغییر دهید :
$route['default_controller'] = 'login'; $route['404_override'] = ''; $route['translate_uri_dashes'] = FALSE;
برای تست کردن پروژه ی ورود با کدایگنایتر به آدرس زیر مراجعه کنید :
و پس از باز کردن آدرس بالا توسط مرورگر باید با تصویر زیر مواجه شوید :
ابتدا برای تست کردن پروژه عمل لاگین را با ایمیل نشان داده شده در تصویر زیر و با پسورد 123456 تست میکنیم :
خب طبق تصویر می بینید که بعد از لاگین کردن منو های وب سایت را مشاهده میکنید و دسترسی به آنها دارید:
در نهایت ما سعی میکنیم یکبار دیگر با ایمیل email3@gmail.com و پسورد 123456 وارد شویم تا ببینیم که سطح دسترسی های این کاربر به چه شکل است
تبریک ! اگر تا اینجا به درستی انجام دادید شما تونستید با استفاده از فریمورک کدایگنایتر سیستم ورود چندگانه را پیاده سازی کنید.
برای یادگیری کامل فریمورک کدایگنایتر بصورت پروژه محور شما میتوانید از دوره ی آموزش ساخت دیوار و دوره ی آموزش ساخت کافه بازار بصورت پروژه محور با استفاده از کدایگنایتر را تهیه کنید و این دوره های کامل را طی کنید.
منبع : وب سایت آموزشی آواسام