閱讀996 返回首頁    go 技術社區[雲棲]


CI筆記

目錄結構說明
license.txt 許可協議
user_guide 用戶手冊
system 框架核心文件
application 應用目錄
index.php 入口文件
------------------------------
MVC
1.入口文件
唯一一個讓瀏覽器直接請求的腳本文件
2.控製器controller
協調模型和視圖
3.模型model
提供數據,保存數據
4.視圖view
隻負責顯示
表單...
5.動作action
是控製器中方法,用於被瀏覽器請求
CI中的MVC
訪問url使用的是pathinfo
入口文件.php/控製器/動作
application目錄中:
controllers         控製器 
models 模型
views 視圖
默認控製器是welcome
默認動作是index
控製器
1.不需要加後綴
2.文件名全部小寫  例如 user.php
3.所有的控製器,直接或間接繼承自CI_Controller類
4.控製器中,對動作(方法)要求:
public
不能以_開頭
視圖
1.在控製器中如果加載視圖
//直接寫視圖名字,不寫擴展名,如果有子目錄,則寫上目錄名
$this->load->view(視圖);
可以多次調用$this->load->view(視圖);
2.視圖中,直接使用原生php代碼
3.推薦使用
<?php foreach($list as $item):?>
<?=$item['name']?>
<?php endforeach;?>
超級對象
當前的控製器對象
提供了很多屬性:
$this->load
裝載器類的實例system/core/Loader.php
裝載器類提供方法:
view() 裝載視圖
vars() 分配變量到視圖
database() 裝載數據庫操作對象 
model() 裝載模型對象
helper()
$this->uri
是CI_URI類的實例 system/core/URI.php
CI_URI類提供方法:
segment(n) 用於獲取url中的第n個參數(值)
傳統的:入口文件.php/控製器/動作/參數1/值1/參數2/值2
入口文件.php/控製器/動作/值1/值2
echo $this->segment(3);//值1
echo $this->segment(4);//值2
//index.php/控製器/index/6
public function index($p=0){
echo $p;//輸出6
}
$this->input
輸入類
是CI_Input類的實例 system/core/Input.php
CI_Input類提供方法:
$this->input->post('username'); //$_POST['username']
$this->input->server('DOCUMENT_ROOT'); //$_SERVER['DOCUMENT_ROOT']
在視圖中,直接用$this來訪問超級對象中的屬性
數據庫訪問
修改配置文件
application/config/database.php
將數據庫訪問對象,裝載到超級對象的屬性中 $this->db
$this->load->database();
$res=$this->db->query($sql);//返回對象
$res->result();//返回數組,數組中是一個一個的對象
$res->result_array();//返回二維數組,裏麵是關聯數組
$res->row()//返回第一條數據,直接是一個對象
參數綁定
$sql="select * from blog_user where name=?";
$this->db->query($sql,$name);//如果有多個問號時,需要傳入一個索引數組
表前綴
$db['default']['dbprefix'] = 'blog_';
$db['default']['swap_pre'] = 'blog_';
配置為一樣,代碼中,直接硬編碼表前綴就行了,如果以後項目數據庫表前綴發生變化,
隻需要修改$db['default']['dbprefix'] = 'new_';代碼中的blog_會自動替換為new_
db的自動加載
application/config/autoload.php
$autoload['libraries'] = array('database');
不需要:$this->load->database();

==================code 2筆記==================================
自增id
 $this->db->insert_id();
 受影響行數
 $this->db->affected_rows();
Active Record
 1.application/config/database.php
  $active_record = TRUE;
 2.application/config/autoload.php
  $autoload['libraries'] = array('database');
 3.在配置文件中,配置表前綴後,會自動添加
 
 
 $res=$this->db->get('表名');//返回結果集對象
 $res->result();
 
 $bool=$this->db->insert('表名',關聯數組);
 
 $bool=$this->db->update('表名',關聯數組,條件);
 
 $bool=$this->db->delete('表名',條件);
 
 //select id,name from tableName where id>=3 order by id desc limit 2,3
 $res=$this->db->select('id,name')
  ->from('user')
  ->where('id >=',3)
  ->limit(3,2)//跳過2條,取出3條數據
  ->order_by('id desc ')
  ->get();
 
 //顯示最近一條SQL
 echo $this->db->last_query();
 
 //where
 //$res=$this->db->where('name','mary')->get('user');
 //$res=$this->db->where('name !=','mary')->get('user');
 //$res=$this->db->where(array('name'=>'mary'))->get('user');
 //$res=$this->db->where(array('name'=>'mary','id >'=>2))->get('user');
 複雜的查詢,請用$this->db->query($sql,$data);//使用問號綁定參數
 
 
擴展CI控製器
 application/core/MY_Controller.php
 控製器就要以繼承自MY_Controller
 
 application/config/config.php
 $config['subclass_prefix'] = 'MY_';
 
模型
 繼承自CI_Model
 在模型中,可以直接使用超級對象中的屬性
 文件名,全小寫
 類名首字母大寫
 建議使用_model作為後綴,防和控製器類名衝突
 
 
url相關函數
 $this->load->helper('url');
 //可以根需要配置自動加載
 //application/config/autoload.php
 //$autoload['helper'] = array('url');
 
 site_url('控製器/方法')
 base_url()
 
 
路由
 application/config/routes.php
 //默認控製器
 $route['default_controller'] = "welcome";
 
https://localhost/ci/index.php/news/201309/4.html
 $route['news/[\d]{6}/([\d]+)\.html']='article/show/$1';
 
隱藏入口文件
 開始apache的rewrite模塊,在httpd.conf文件中
 LoadModule rewrite_module modules/mod_rewrite.so
 重啟apache
 在入口文件同級目錄中,放入一個.htaccess文件
 內容如下:
  <IfModule mod_rewrite.c>
     RewriteEngine on
     RewriteCond %{REQUEST_FILENAME} !-d
     RewriteCond %{REQUEST_FILENAME} !-f
     RewriteRule ^(.*)$ index.php/$1 [QSA,PT,L]
  </IfModule>
分頁
 //裝載類文件
 $this->load->library('pagination');
 $this->load->helper('url');
 //每頁顯示10條數據
 $page_size=10;
 
 $config['base_url'] =site_url('user/test');
 //一共有多少條數據
 $config['total_rows'] = 100;
 //每頁顯示條數
 $config['per_page'] = $page_size;
 $config['first_link'] = '首頁';
 $config['next_link'] = '下一頁';
 $config['uri_segment']=3;//分頁的數據查詢偏移量在哪一段上
 
 $this->pagination->initialize($config);
 
 $offset=intval($this->uri->segment(3));//與$config['uri_segment']對應
 $sql="select * from blog_user limit $offset, $page_size";
 echo $sql;
 
 
 $data['links']=$this->pagination->create_links();
 
 $this->load->view('user/test',$data);
 
文件上傳
 1.手動創建好上傳目錄
 
<form action="<?php echo site_url('user/upload')?>" method="post" enctype="multipart/form-data">
  <input type="file" name="pic" />
  <input type="submit" value="上傳" >
 </form>
 
//上傳目錄需要手工創建
 $config['upload_path']='./uploads/';
 //允許
 $config['allowed_types']='gif|png|jpg|jpeg';
 $config['max_size'] = '10000';
 //生成新文件名
 $config['file_name']=uniqid();
 //裝載文件上傳類
 $this->load->library('upload',$config);
 $this->upload->do_upload('pic');
 
 var_dump($this->upload->data());
 
 //獲取上傳之後的數據
 $data=$this->upload->data();
 echo $data['file_name'];
 
驗證碼
 //生成一個隨機不重複的字符串作為加密用的key
  //保存到application/config/config.php
  //$config['encryption_key'] = 'adb8bf6d0ac4e17b42a80941582497a4';
  //echo md5(uniqid());exit;
  $this->load->library('session');
  $user=array('id'=>3,'name'=>'jack');
  //session_start();
  //$_SESSION['user']=$user;
  $this->session->set_userdata('user',$user);
  //不在這這裏獲取剛放入的數據
  //隻有頁在從新加載或跳轉到別的url中,才能獲取到
 
  //一次性的數據,隻能讀取一次
  $this->session->set_flashdata('test','aaaaaaaaaaaaaa');
 
 }
 
 public function show_session(){
 
  $this->load->library('session');
  //取CI session中的數據
  $user=$this->session->userdata('user');
  var_dump($user);
 
  //下次刷新,就沒有了
  $test=$this->session->flashdata('test');
  echo $test;
 
 }
 
表單驗證
 
 $this->load->library('form_validation');
 $this->form_validation->set_rules('name', '用戶名', 'required');
 $this->form_validation->set_rules('email', '郵箱', 'valid_email');
 
 $bool=$this->form_validation->run();
 
 if($bool){
  //調用模型保存到數據庫
 
 }else{
  //顯示錯誤信息
  $this->load->view('user/add');
 
 }
<?php echo validation_errors();?>
 <form action="<?php echo site_url('user/insert');?>" method="post">
  name <input type="text" name="name" value="<?php echo set_value('name')?>" />
  <?php echo form_error('name','<span>','</span>')?>
  <br>
  password <input type="password" name="password" /><br>
  email <input type="text" name="email" value="<?php echo set_value('email')?>" />
  <?php echo form_error('email')?>
  <br>
  <input type="submit" value="submit" />
 </form>


 
 
 
 

最後更新:2017-04-03 14:54:23

  上一篇:go 劍指Offer之鏈表中倒數第k個結點
  下一篇:go error: %preun(keepalived-1.2.7-3.el6.x86_64) scriptlet failed, exit status 1 解決