ci框架(一)

ci目錄結構                                                                                    php

|-----system                框架程序目錄  
    |-----core              框架的核心程序  
        |-----CodeIgniter.php   引導性文件  
        |-----Common.php    加載基類庫的公共函數  
        |-----Controller.php    基控制器類文件:CI_Controller  
        |-----Model.php     基模型類文件:CI_Model  
        |-----Config.php    配置類文件:CI_Config  
        |-----Input.php     輸入類文件:CI_Input  
        |-----Output.php    輸出類文件:CI_Output  
        |-----URL.php       URL類文件:CI_URl  
        |-----Router.php    路由類文件:CI_Router  
        |-----Loader.php    加載類文件:CI_Loader  
    |-----helpers           輔助函數  
        |-----url_helper.php    url相關的輔助函數,如:建立url的輔助函數  
        |-----captcha_helper.php建立圖形驗證碼的輔助函數  
    |-----libraries         通用類庫  
        |-----Pagination.php    通用分頁類庫  
        |-----Upload.php    通用文件上傳類庫  
        |-----Image_lib.php 通用圖像處理類庫  
        |-----Session.php   通用session類庫  
    |-----language          語言包  
    |-----database          數據庫操做相關的程序  
        |-----DB_active_rec.php 快捷操做類文件(ActiveRecord)  
    |-----fonts             字庫  
      
|-----application           項目目錄  
    |-----core              項目的核心程序  
    |-----helpers           項目的輔助函數  
    |-----libraries         通用類庫  
    |-----language          語言包  
    |-----config            項目相關的配置  
        |-----config.php    項目相關的配置文件     
        |-----database.php  數據庫相關的配置文件  
        |-----autoload.php  設置自動加載類庫的配置文件  
        |-----constants.php 常量配置文件  
        |-----routes.php    路由配置文件  
    |-----controllers       控制器目錄  
        |-----welcome.php   控制器文件,繼承CI_Controller  
    |-----models            模型目錄  
        |-----welcome_model.php 模型文件,繼承CI_Model  
    |-----views             視圖目錄  
        |-----welcome.php   視圖模板文件,默認後綴名爲.php  
    |-----cache             存放數據或模板的緩存文件  
    |-----errors            錯誤提示模板  
    |-----hooks             鉤子,在不修改系統核心文件的基礎上擴展系統功能  
    |-----third_party       第三方庫  
    |-----logs              日誌  
  
|-----index.php             入口文件

訪問形式                                                                                      html

在\application\controllers\welcome.php中添加函數:sql

public function hello()    
{    
    echo "test";   
}

image

CI的訪問url使用的是pathinfo,入口文件.php/控制器/動做數據庫

本身新建控制器,hello.php:數組

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');

    class Hello extends CI_Controller 
    {
        public function sayHello($name)
        {
            echo $name,",Hello World";
        }
    }
?>

image

注意:緩存

  • 方法名如下劃線開頭的是不能訪問成功的,只能間接訪問。
  • 只能訪問public修飾的方法。
  • 儘可能不要與類名相同的方法,會看成構造函數。

加載視圖                                                                                     session

application\views\view_test.php或者application\views\view\test.php(這中作法主要是方便同一類型的視圖能夠放在同一個文件夾下方便管理)app

<html>
<head>
</head>
<body>
test_ci_hello_world
</body>
</html>

控制器:框架

public function addView()
{
    $this->load->view("view_test");
}

或者:函數

public function addView2()
{
    $this->load->view("view/test");
}

效果:

image

image

分配變量                                                                                     

把數據從控制器中傳到視圖中,控制器:

public function addView()
        {
            $this->load->vars("title","value");
            $list = array(
            array('id'=>1,'name'=>'jack','email'=>'123@123.com'),
            array('id'=>2,'name'=>'jack2','email'=>'1233@123.com'),
            array('id'=>3,'name'=>'jack3','email'=>'12333@123.com')
            );
            $data['new_title']="標題";
            $data['list']=$list;
            $this->load->vars($data);
            
            $this->load->view("view_test");
        }

視圖:

<html>
    <head>
    </head>
    <body>
        <h1><?php echo $title;?></h1>
        <h1><?php echo $new_title;?></h1>
        test_ci_hello_world
        <table>
            <?php foreach($list as $item):?>
            <tr>
                <td><?=$item['id']?></td>    
                <td><?=$item['name']?></td>
                <td><?=$item['email']?></td>                
            </tr>
            <?php endforeach;?>
        </table>
    </body>
</html>

效果:

image

load網站進去,控制器:

public function addView()
        {
            $this->load->vars("title","value");
            $list = array(
            array('id'=>1,'name'=>'jack','email'=>'123@123.com'),
            array('id'=>2,'name'=>'jack2','email'=>'1233@123.com'),
            array('id'=>3,'name'=>'jack3','email'=>'12333@123.com')
            );
            $data['new_title']="標題";
            $data['list']=$list;
            $this->load->vars($data);
            
            $this->load->view("view_test");
            $this->load->view("footer");
        }

視圖view_test:

<html>
    <head>
    </head>
    <body>
        <h1><?php echo $title;?></h1>
        <h1><?php echo $new_title;?></h1>
        test_ci_hello_world
        <table>
            <?php foreach($list as $item):?>
            <tr>
                <td><?=$item['id']?></td>    
                <td><?=$item['name']?></td>
                <td><?=$item['email']?></td>                
            </tr>
            <?php endforeach;?>
        </table>

視圖footer:

CI_hello_world!!!
</body>
</html>

顯示效果:

image

uri參數獲取                                                                                

控制器:

public function getUri($id,$name,$year)
        {
            echo "id--->".$id."---name--->".$name."---year--->".$year."<br />";
            echo "segment(1)--->".$this->uri->segment(1)."<br />";
            echo "segment(2)--->".$this->uri->segment(2)."<br />";
            echo "segment(3)--->".$this->uri->segment(3)."<br />";
            echo "segment(4)--->".$this->uri->segment(4)."<br />";
            echo "segment(5)--->".$this->uri->segment(5)."<br />";
        }

效果:

image

加載數據庫                                                                                 

這個操做在MVC中是放到model中作的。

在\application\config\database.php中配置數據庫參數,注意dbprefixswap_pre這兩個參數。在php中寫的是前綴,會默認看成swap_pre,而後放到數據庫中的時候會轉成dbprefix,可是最好兩個都弄成同樣的。

還有$active_group,默認是default,若是要鏈接兩個數據庫,把default另外取名,而後在函數中寫明參數就OK。

必須繼承數據核心類CI_Model,同時重載父類中的構造方法。

class Model_name extends CI_Model
{
    function __construct()
    {
        parent::__construct();
    }
}

在每次使用數據庫的時候,都須要加載一次數據庫:

$this->load->database();

爲了方便,能夠將數據庫的加載設置成自動加載,在\application\config\autoload.php中。

$autoload['libraries'] = array('database');

對於數據庫訪問對象,裝載到超級對象的屬性中 $this->db

$res = $this->db->query($sql);//返回對象
$res->result();//返回數組,數組中是一個一個的對象
$res->result_array();//返回二維數組,裏面是關聯數組
$res->row();//返回第一條數據,直接是一個對象

AR操做數據庫                                                                              

在database.php文件中,將$active_recoed的值改成TRUE,這樣就能夠使用AR了。

//查詢
public function index()
{
    $res = $this->db->get('表名');//這裏自動調用前綴
    foreach($res->result() as $item)
    {
        echo $item->name."<br />";
    }
}
//插入
public function index()
{
    $data=array(
        'name'=>'lisi',
        'password'=>md5('lisi')
    );
    $bool = $this->db->insert("表名",$data);
    var_dump($bool);
}
//更新
public function index()
{
    $data=array(
        'name'=>'wangwu',
        'password'=>md5('wangwu')
    );

    $bool = $this->db->update('表名',$data,array('id'=>3));
    var_dump($bool);
}
//刪除
$bool = $this->db->delete('表名',array('id'=>2));
var_dump($bool);
相關文章
相關標籤/搜索