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;
}
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();
}
}
}
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;
}
}
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