用户
 找回密码
 入住 CI 中国社区
搜索
查看: 2851|回复: 3
收起左侧

[优化] 信息示提及模板调用的简化

[复制链接]
发表于 2014-5-8 23:55:05 | 显示全部楼层 |阅读模式
学习一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 */
 
 
复制代码


发表于 2014-5-12 11:17:16 | 显示全部楼层
写的还不错,但是我感觉CI的验证码类太麻烦,所以做成我都不用CI的验证码,用其他更方便的
 楼主| 发表于 2014-5-17 18:15:40 | 显示全部楼层
那有没有方法,把那个信息提示,共用啊,因为现在每次在要都控制里写 信息提示

本版积分规则