|
学习一CI有一段时间了,感觉CI很实用,接近原生态,没有太多华而不实的东西,现在学习遇到了一点小难题,希望各位高手指点
问题一、每个控制器里的方法里都要加载视图,控制器一多,就会很多重复的加载视图的代码,这有点偏离程序的思想,有没有更好的方法可以实现?
问题二、关于提示信息,每次要调用到提示信息,都要加载一个视图然后传值过去,这样重复代码也会很多
重点:其实说来说去就是简少视图调用的重复代码,以下控制品,是我写的一个后台登录局面,希望各位指教
PHP复制代码 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Login extends CI_Controller {
/*
加载构造涵数
*/
public function __construct ()
{
parent ::__construct ();
$style = $this->config->item('style');//获取模板配置文件
$this->config->load($style);//载入模板配置文件
$this->load->helper(array('url','captcha'));//加载辅助涵数
$this->load->database();//加载数据库
$this->load->library('form_validation');//加载表单验证类
$this->lang->load('login');//加载登录语言文件
}
public function index ()
{
#调用视图,如需传值需传二维数组
$this->_view ();
}
public function submit ()
{
#表单验证
//验证配置文件/hx110/config/form_validation.php
$this->load->library('form_validation');
//更改错误定界符
$this->form_validation->set_error_delimiters('<div style="color:#F00; font-size:12px;">', '</div>');
if($this->form_validation->run() == FALSE)
{//表单验证不正确
#调用视图,如需传值需传二维数组
$this->_view ();
}
else
{//表单验证正确
$captcha = $this->db->dbprefix('captcha');//自动添加表前缀
#首先删除旧的验证码
$expiration = time()-7200; // 2小时限制
$this->db->query("DELETE FROM $captcha WHERE captcha_time < ".$expiration);
#数据库查询验证码是否存在:
$sql = "SELECT COUNT(*) AS count FROM $captcha WHERE word = ? AND ip_address = ? AND captcha_time > ?";
$binds = array($_POST['captcha'], $this->input->ip_address(), $expiration);
$query = $this->db->query($sql, $binds);
$row = $query->row();
if ($row->count == 0)
{
$data = array(
'msg' => $this->lang->line('login_msg_captcha'),//'你输入的验证不正确',
'back' => site_url ('login'),
);
$this->_msg ($data);//调用提示信息
}
else
{//验证码正确,执行用户名、密码进行数据验证
echo '验证码正确,要进行数据查询';
}
}
}
#视图调用
function _view ($data = NULL)
{
#生成验证码
$vals = array(
'word' => rand(1000, 10000),
'img_path' => './staticfile/captcha/',
'img_url' => base_url ('staticfile/captcha').'/',
'img_width' => '65',
// 'img_height' => '33',
'expiration' => 7200
);
$cap = create_captcha ($vals);
#将验证码写入数据库
$data = array(
'captcha_time' => $cap['time'],
'ip_address' => $this->input->ip_address(),
'word' => $cap['word']
);
$query = $this->db->insert_string('captcha', $data);
$this->db->query($query);
#将数据传给视图文件
$data ['cap'] = $cap['image'];//验证码
$data['lang_submit'] = $this->lang->line('login_submit');
$data['lang_username_placeholder'] = $this->lang->line('login_username_placeholder');
$data['lang_password_placeholder'] = $this->lang->line('login_password_placeholder');
$data['lang_captcha_placeholder'] = $this->lang->line('login_captcha_placeholder');
$data['lang_captcha_title'] = $this->lang->line('login_captcha_title');
$data['lang_captcha_msg'] = $this->lang->line('login_captcha_msg');
$style_login = $this->config->item('login');//登录模板风格
$this->load->view($style_login,$data);
}
#信息提示
function _msg ($data)
{
$style_msg = $this->config->item('msg');//信息提示模板
$this->load->view($style_msg,$data);
}
}
/* End of file login.php */
/* Location: ./hx110/controllers/login.php */
复制代码
|
|