关闭

CI框架学习

169人阅读 评论(0) 收藏 举报
CI框架学习
php在哪里都可以嵌入

CI控制器
CI超级对象
数据库访问
AR模型
如何扩展CI的控制器
模型
url相关函数
设置路由
分页
文件上传
session
验证码
表单验证
在php什么地方用memcache
一.数据库读出来的数据(select) 使用memcache缓存
二.在会话控制session 讲session写入memcache
1.会memcahe
2.session_set_save_handler()
3.php的session
uniqid() 生成一个唯一ID
*****************************************************************************


框架目录为入口文件所在目录
注意:
url 浏览器相同会进行缓存。。

CI框架
system:核心
index.php:入口文件 
application:应用
基于MVC 访问使用pathinfo格式
数据来自于模型.
控制器 CI_Controller
默认的控制器$route['default_controller'] = "welcome";
$route['404_override'] = '';
1.不需要加后缀,文件名小写。
2.所有的控制器,直接或间接接触CI_Controller类。
3.与类名相同的方法会被php当作构造方法。
4.外部访问必须是public
5.在url参数可以传到方法参数里  function index($a,$b){};
6.控制器不参入查询数据库。
CI的超级对象:控制器对象(自动实例化CI_Loader());
属性:
$this->load:装载器对象。 system/core/Loader.php
view() 装载视图
vars() 分配变量
database() 装载数据库操作对象。
model()     装载模型,获取数据。
helper()   装载帮助
library() 装载类库
$this->uri
是CI_URI类的实例 system/core/URI.php
CI_URI类提供方法;
segment(n);用于获取url中的第n个参数;
传统的url:入口文件.php/控制器/动作/参数1/值1/参数2/值2
CI: 入口文件.php/控制器/动作/值1/值2
$this->input
是CI_Input类的实例 system/core/Input.php //会进行安全处理
CI_Input类提供方法;
$this->input->post('控件名',ture)     //获取$_POST 过滤xss攻击,没有过滤和转义处理
$this->input->get('控件名')     //获取$_get 没有过滤和转义处理。没过滤xss攻击
$this->input->server("REMOTE_ADDR")        //$_SERVER["REMOTE_ADDR"]
$this->input->cookie("");
...
视图
1.在控制器里加载视图,$this->load-view("user_index",$data); 加载根目录下的视图,("user\index");根目录user文件夹下的index 不写扩展名
2.在视图里分配变量。$this->load->vars("title","这是标题");再显示视图
<?php foreach ($todo_list as $item):?>

<li><?php echo $item;?></li>

<?php endforeach;?>
函数返回引用
在视图里中可以直接用$this来访问超级对象(include 视图的);
<?php
echo $this->input->server("SERVER_ADDR");
?>
model模型:
1.继承CI_Model
2.文件名小写,类名首字母大写。建议_model为后缀,防止与控制器冲突。
3.可以直接使用超级对象中的属性;
4.只允许在model模型里获取数据,通过控制器输出。
$this->load->model('Model_name');
$this->Model_name->function();

数据库访问
DB_driver.php
修改配置文件 application/config/database.php
//装载数据库操作
$this->load->database();
//装载成功后,数据库对象会在$this->db属性中
$res = $this->db->query($sql);
$res->result();//返回数组,数组中是一个一个的对象。对象用'->'调用
$res->result_array();返回二维数组,里面是关联数组
$this->db->insert_id(); 自增id
$this->db->affected_rows();受影响行数
$this->db->last_query();//最后一次执行的sql语句.
。。。
封装查询:(防sql注入)
$sql = "SELECT * FROM some_table WHERE id = ? AND status = ? AND author = ?"; 
$this->db->query($sql, array(3, 'live', 'Rick')); (绑定参数)
安全表前缀:
$db['default']['dbprefix'] = 'blog_';
$db['default']['swap_pre'] = 'blog_'; 表前缀
配置为一样,代码中,直接硬编码表前缀就行,如果以后项目数据库表前缀发生改变。
只需要修改$db['default']['dbprefix'] = 'new_';代码中的blog_会自动替换为new_.
db的自动加载
$autoload['libraries'] = array('database');
不需要 $this->load->database();
AR模型 DB_active_rec.php
1.数据配置文件 $active_record = TRUE;  开启AR;
2.在配置文件中,配置表前缀后,会自动添加
$res = $this->db->get("表名");//返回结果集。
$res->result();
增删改:
$this->where('id',$id) //或者$this->where(array());
$this->db->insert('表名',关联数组);
$this->db->update('表名',关联数组的条件);
$this->db->delete("表名", 条件的关联数组);
查找:
$res =  $this->db->select('id,name')
 ->from('表名')
 ->where('id  >=',3)  // 或者 where(array('name ='=>"mary","id"=2))
 ->limit(3,2) //跳过2条,取3条。 注意
 ->order_by('id desc')->get();
$this->db->last_query();//最近一次执行的sql语句.

扩展控制器:(制定自己的控制器基类)(对应的文件夹) 
application/core/MY_Controller.php
class MY_Controller extends CI_Controller {
public function __construct(){
parent::__construct();
//登录验证
//权限验证
...
}
}
别的控制器继承我们的自己的控制器(MY_Controller);
扩展library 类似
application/config/config.php
$config['subclass_prefix'] = 'MY_' 可以修改自定义前缀
url函数:
$this->load->helper('url'); //可以根据需要自动加载 autoload.php
site_url(控制器/方法): //返回站点的URL, 如果在config.php 文件中指定了base_url会返回指定的值,否则自动获取
base_url() //网址根目录,你可以用它指定文件的路径,像是image路径或者css路径

redirect() //转向指定的url
路由:
application/config/routes.php
//默认控制器
$route['default_controller'] = 'welcome';
$route['products/([a-z]+)/(\d+)'] = "$1/id_$2";
$route['404_override'] = '';
//index.php/news/312456/32.html 会被路由到article/show.
$route['news/\d{6}/\d+\.html']  = "article/show";
不规则的url可以路由到我们的控制器中
隐藏入口文件(伪静态)
开启apache的rewrite模块(httpd.config)
loadModule rewirte_module moules/mod_rewrite.so
重启服务器
在入口文件同级目录中,放入一个 .htaccess文件
内容如下:
RewriteEngine on 
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond $1 !^(index\.php|images|robots\.txt)  
RewriteRule ^(.*)$ index.php/$1 [L]
分页:
$config['base_url'].="&pass_id=".$_GET['pass_id'];
config['enable_query_strings']  = TRUE;
$this->pagination->initialize($config);
$data['links'] = $this->pagination->create_links();
$this->load->view("article\show",$data);
在一些情况下你需要在 URL 中使用查询字符串:
index.php?c=products&m=view&id=345
在url里传递其他参数
可以在 application/config/config.php 文件中进行设置
$config['page_query_string'] = TRUE; //连接符会从/ 变为? 如果你使用查询字符串,那么就必须使用自己建立的 URL ,而且不能使用URL 辅助函数(或是其他生成 URL 的辅助函数,例如表单辅助函数),因为这些都是根据分段 URL 设计的。
$config['first_url'] = site_url('article/show/1').'/qhi/1/dhiwu/2';
$config['suffix'] = "/qhi/1/dhiwu/2";//参数传递

文件上传:
手动创建上传目录
SESSION:
d1c6074070e4f1f321b01aef1e01b7df// md5(uniquid())
默认放在cookie里
生成一个随机不重复的字符串作为加密用的Key,保存到application/config/config.php
$config['encryption_key'] = 'd1c6074070e4f1f321b01aef1e01b7df';
$this->load->library('session');//初始化 Session
$this->session->set_userdata();
在当前方法session里获取不到session
只能在其他的方法里获取$this->session->userdata();
session 配置在application/config/config.php中
一次性数据,只能读取一次
$this->session->set_flashdata(...);
验证码:
CAPTCHA 辅助函数
$this->load->helper('captcha');
session_start();
$_SESSION['cap'] = $cap['word'];

表单验证:
$this->load->library('form_validation');
$this->form_validation->set_rules('name','用户ming');
$bool =$this->form_validation->run();
if($bool){
调用模型保存数据到数据库
}else{
//显示错误信息
$this->load->view('user/add'); //重新加载视图
}
在视图echo form_error('name');

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:5454次
    • 积分:325
    • 等级:
    • 排名:千里之外
    • 原创:27篇
    • 转载:10篇
    • 译文:0篇
    • 评论:0条
    文章分类