[ BLACK_SWORD @ 01.03.2012. 11:58 ] @
Pozdrav! Koristim CodeIgniter framework i nikako ne svaćam na koji način upotrijebiti model. Po mojem razmišljanju u php-u je model sam po sebi suvišan jer je PHP slabo tipizirano jezik, pa su onda tu ubacili model gdje ćeš kao dohvatiti podatke, ali nema mi to baš nekog smisla. E sad me zanima vaš način rada kako koristite model? Dali kao objekat npr User_model Code: function get_user($user_id, $data = '*') { $this->db->select($data); $this->db->where('user_id', $user_id); return $this->db->get('users')->row(); } function add_user($data) { $this->db->insert('users', $data); return $this->db->insert_id(); } function update_user($user_id, $data) { $this->db->where('user_id', $user_id); $this->db->update('users', $data); return TRUE; } i sad sve uradim u controllers i prosljedim modelu. ili radite na neki drugi način npr napravit login skriptu controllers/user.php Code: class User extends CI_Controller { public function __construct() { parent::__construct(); $this->load->model('User_model'); } public function login() { // Korisnik ako je logovan a pokuša otvorit login stranicu preusmjeri ga na početnu stranicu if ($this->session->userdata('logged_in')) { redirect(); } $this->load->library('form_validation'); $this->form_validation->set_rules('username', 'Korisničko ime', 'trim|required'); $this->form_validation->set_rules('password', 'Šifra', 'trim|required'); if ($this->form_validation->run() == FALSE) { $data = array( 'main_content' => 'user/login', 'title' => 'Prijava', 'description' => 'Stranica za prijavu (login)', 'keywords' => 'login, prijava, korisnik', 'nav' => 'login' ); $this->load->view('template', $data); } else { // Provjera dali je banovan ip if ($this->User_model->banned_ip()) { $this->session->set_flashdata('login_error', 'Vaša ip adresa je banovana.'); redirect('user/login'); } $username = $this->input->post('username'); $password = $this->input->post('password'); // Pravi random string koji ce se upisat u bazu korisnika pri svakom loginu $this->load->helper('string'); $validation_code = random_string('alnum', 10); $data = $this->User_model->login($username, $password, $validation_code); if ( ! $data) { $this->session->set_flashdata('login_error', 'Pogrešni korisnički podaci.'); redirect('user/login'); } if ($data === 'is_banned') { $this->session->set_flashdata('login_error', 'Banovani ste.'); redirect('user/login'); } if($data === 'not_activated') { $this->session->set_flashdata('login_error', 'Niste aktivirali korisnički račun.'); redirect('user/login'); } $data = array( 'logged_in' => TRUE, 'user_id' => $data->user_id, 'username' => $data->username, 'status' => $data->status ); $this->session->set_userdata($data); redirect(); } } } models/user_model.php Code: class User_model extends CI_Model { function __construct() { parent::__construct(); } function login($username, $password, $validation_code) { $query = $this->db->query("SELECT `user_id`, `username`, `password`, `status`, `banned`, `activated` FROM `users` WHERE `username` = " . $this->db->escape($username) . " LIMIT 1"); if ($query->num_rows() != 0) { $row = $query->row(); if ($row->banned == 1) { return 'is_banned'; } elseif ($row->activated == 0) { return 'not_activated'; } elseif ($row->password == sha1($password)) { $this->db->query("UPDATE `users` SET `last_login` = " . time() . ", `ip_address` = '" . $this->input->ip_address() . "', `validation_code` = '$validation_code' WHERE `user_id` = " . $row->user_id . " LIMIT 1"); return $row; } return FALSE; } return FALSE; } // Provjerava dali je banovan ip function banned_ip() { $query = $this->db->query("SELECT `ip_address` FROM `ban_ip` WHERE `ip_address` = '" . $this->input->ip_address() . "' LIMIT 1"); if ($query->num_rows() != 0) { return TRUE; } return FALSE; } } Znači controller koristim samo kao router (usmjerivač). Dali je ovakav način rada dobar? Hvala na odgovoru |