CodeIgniter筆記

移除URL中的index.php

開啓Apache的mod_rewrite模塊,在項目目錄中新建.htaccess 文件,添加以下內容php

RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php/$1 [L]

獲取CI超級對象

$CI = & get_instance()
$version_id = $CI->config->item("version_id");

使用輔助函數

通常狀況下,輔助函數位於 system/helpers 或者 application/helpers 目錄 目錄下。
加載 URL 輔助函數 ,它的文件名爲 xxx_helper.phphtml

public function use_help()
{
    //加載單個
    $this->load->helper('url');
    //加載輔助函數,單個或多個
    // 路徑:application\helpers\demo_helper.php 和 application\helpers\test_helper.php
    // $this->load->helper(['demo','test']);
    echo site_url();
    echo base_url();
}

擴展輔助函數

要擴展原始的 數組輔助函數 ,首先你要建立一個文件 application/helpers/MY_array_helper.php,而後在文件中添加或重寫函數。mysql

https://codeigniter.org.cn/user_guide/general/helpers.html

設置自定義前綴

用於擴展輔助函數的文件名前綴和擴展類庫和核心類是同樣的。要自定義這個前綴,你能夠打開 application/config/config.php 文件而後找到這項:sql

$config['subclass_prefix'] = 'MY_';

使用codeigniter類庫

全部的系統類庫都位於 system/libraries/ 目錄下,大多數狀況下,在使用以前, 你要先在 控制器 中初始化它,使用下面的方法數據庫

//加載類庫
$this->load->library('encrypt');
//使用加載的類庫
$tt  =  $this->encrypt->encode('123','132');

建立本身的類庫

自定義的類庫文件應該放置在 application/libraries 目錄下,當你初始化類時,CodeIgniter 會在這個目錄下尋找這些類。
備註:數組

文件名首字母必須大寫,例如:Myclass.php
類名定義首字母必須大寫,例如:class Myclass
類名和文件名必須一致

例如cookie

<?php
class Someclass
{
    public function some_class($data)
    {
        return md5($data);
    }
}

使用session

public function use_custom_library()
{
    //建立自定義類庫
    $this->load->library('someclass');
    echo $this->someclass->some_class(x);//目錄:libraries/service/emr.php,例如:$this->load->('service');調用$this->service->emr->some_fun();
}

擴展原生類庫

要擴展原生的類庫,只須要新建一個文件,以MY_開頭繼承原類庫便可,示例:要擴展原Email類庫,只需命名爲 application/libraries/MY_Email.php , 而後定義你的類app

<?php
class MY_Email extends CI_Email
{
    //
}

替換原生類庫

要替換原類庫文件,只需定義與原生的類庫命名徹底同樣,例如, 要替換掉原生的 Email 類的話,你要新建一個 application/libraries/Email.php 文件, 而後定義定義你的類:ide

<?php
class CI_Email 
{
    //
}

更多參考

https://codeigniter.org.cn/user_guide/general/creating_libraries.html

控制器

控制器文件保存到 application/controllers/ 目錄下。
控制器命名規則

1.`文件名`必須是大寫字母開頭,如:'Demo.php' 。
2.`類名`必須以`大寫`字母開頭。

示例:

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

class Welcome extends CI_Controller 
{
   public function index()
   {
      $this->load->view('welcome_message');
   }
}

模型

模型類位於你的 application/models/ 目錄下。

模型命名規則

1.類名的第一個字母 必須`大寫`,其他部分小寫。
2.文件名和類名應該一致。

例如,建立一個Demo_model.php,路徑:applicationmodelsDemo_model.php

<?php

class Demo_model extends CI_Model
{
    //對應表中的字段
    public $name;
    public $age;
    public $addr;

    /**
     * 返回最後兩條記錄
     * @return mixed
     */
    public function get_last_two_record()
    {
        $query = $this->db->get('demo', 2);
        return $query->result_array();
    }

    /**
     * 插入記錄
     */
    public function insert_record($data)
    {
        $this->name = $data['name'];
        $this->age  = $data['age'];
        $this->addr = $data['addr'];

        $this->db->insert('demo', $this);
    }

    /**
     * 更新記錄
     */
    public function update_record($data)
    {
        $this->name = $data['name'];
        $this->age  = $data['age'];
        $this->addr = $data['addr'];
        $this->db->update('demo', $this, array('id' => $data['id']));
    }
}

在控制器調用

class demo extends CI_Controller
{
    public function use_model()
    {
        $data = [
            'name' => 'Daiod',
            'age' => 24,
            'addr' => 'Chigo',
//            'id' => 8
        ];
        //加載model
        $this->load->model('demo_model');
//        $this->load->model('demo/test','demoModel'); //若是model下有子目錄,則$this->load->model('xxx/xxx');
        //給model定義別名
        $this->load->model('demo_model','demoModel');

        //調用model中的方法 $this->model_name->method();
//        $res = $this->demo_model->get_last_two_record();
        $res = $this->demoModel->get_last_two_record();
        print_r($res);
        //插入記錄
//        $this->demo_model->insert_record($data);
        //使用demo_model的別名
//        $this->demoModel->insert_record($data);
        //更新
//        $this->demo_model->update_record($data);
    }
}

打印日誌

修改config.php文件

/*
|--------------------------------------------------------------------------
| Error Logging Threshold
|--------------------------------------------------------------------------
|
| You can enable error logging by setting a threshold over zero. The
| threshold determines what gets logged. Threshold options are:
|
|  0 = Disables logging, Error logging TURNED OFF
|  1 = Error Messages (including PHP errors)
|  2 = Debug Messages
|  3 = Informational Messages
|  4 = All Messages
|
*/
$config['log_threshold'] = 1; //默認爲0,這裏修改錯誤級別 error,debug,info

使用

public function log_write()
{
    //打印日誌,與配置文件中設置錯誤級別對應
    log_message('error', "this is error messages");
    log_message('debug', "this is debug messages");
    log_message('info', "this is debug messages");
    echo "<br/>";
}

數據庫操做

配置

配置文件路徑:CodeIgniterapplicationconfigdatabase.php
自動鏈接,須要修改CodeIgniterapplicationconfigautoload.php文件,

$autoload['libraries'] = array();
//修改成
$autoload['libraries'] = array('database');

手動鏈接

$this->load->database();

操做

查詢

public function select()
{
    # 獲取表中全部記錄
    $query = $this->db->get('demo');
    //等價於
    $query = $this->db->query("select * from demo");
    //返回全部記錄的的數組
    $data = $query->result_array();
    //返回全部記錄的的數組對象
    $data = $query->result();

    //條件查詢
    $data = $this->db->select('name', 'addr')
        ->from('demo')
        ->where('name = \'xiaoli\'')  // ->where('id >=', 1)
        ->limit(2)
        ->order_by('age')
        ->get()
        ->result_array();//返回數組
    //where條件
    //where(array('name'=>'mary', 'id >'=>'1')); 表示name字段值是mary而且id字段值是1
    //where('name', 'mary')或where('name =', 'mary'); 表示查詢條件是name字段值是mary

    //row() 只返回一行記錄,返回的是一個對象
    $data = $query->row();

    #row_array() 只返回一行記錄,返回的是一個數組
    $data = $query->row_array();

    //num_rows() 返回查詢結果行數
    $data = $query->num_rows();

    //num_fields() 返回查詢請求的字段個數
    $data = $query->num_fields();

    //free_result() 釋放當前查詢所佔用的內存並刪除關聯資源標識
    $data = $query->free_result();

    print_r($data);
    #返回最後運行的查詢Sql語句
    echo $this->db->last_query(); //select * from demo

    #獲取插入的自增Id
    echo $this->db->insert_id();

    //寫入和更新操做被影響的行數
    echo $this->db->affected_rows();

    //返回指定表的總行數
    echo $this->db->count_all('demo');

    //輸出當前的數據庫版本號
    echo $this->db->version();

    //輸出當前的數據庫平臺
    echo $this->db->platform(); //mysqli

    //查詢語句
    $this->db->select('column1','column2'); //選擇查詢的字段
    $this->db->get('table_name'); //表示SELECT * FROM table_name
    $this->db->get('table_name', 10, 20); //參數2表示每頁記錄數(limit),參數3表示偏移(offset),SELECT * FROM table_name LIMIT 20, 10
    $this->db->select_max();//可接受兩個參數,參數2表示別名
    $this->db->select_min();//同上
    $this->db->select_avg();//同上
    $this->db->select_sum();//同上
    $this->db->from('table_name');//選擇表名
    $this->db->join('table2','table2.pid=table.id','left');//$this->db->from('table1');
    $this->db->get_where();
    //示例
    $this->db->get_where('table_name', array('id' => $id), $limit, $offset);
    $this->db->where('字段','值');// where 字段 = '值';或者where('id >',2);
    $this->db->or_where();//子句OR 鏈接
    $this->db->where_in('xx',['xx','xx']);// where_in('username',['Joe','Lucy','Lily']);
    $this->db->or_where_in('xx',['xx','xx']);
    $this->db->where_not_in();
    $this->db->or_where_not_in();
    $this->db->like('title','match');// where title like '%match%';參數3表示before(%match),after(match%),none(match)默認爲both
    //示例
    $array = array('title' => $match, 'page1' => $match, 'page2' => $match);
    $this->db->like($array);
    // WHERE title LIKE '%match%' AND page1 LIKE '%match%' AND page2 LIKE '%match%'

    $this->db->or_like(); //OR鏈接

    $this->db->not_like();
    $this->db->or_not_like();
    $this->db->group_by();
    $this->db->distinct();
    $this->db->having();
    $this->db->or_having();
    $this->db->order_by();
    $this->db->limit();
    $this->db->count_all_results();
}

插入

public function add()
{
    //插入數據,被插入的數據會被自動轉換和過濾,例如:
    $data = array('name' => "xiaoming", 'age' => 23, 'addr' => 'chognqing');
    $this->db->insert('demo', $data);//insert_batch()插入多條,$data爲二維數組
}

更新

public function update()
    {
//        $data = array('name' => 'xiaoming', 'age' => 26, 'addr' => 'shanghai');
//        $where = "name = 'xiaoming'";
//        $this->db->update('demo', $data, $where);//demo爲表名
        //或者
//        $this->db->where('id', 6);
//        $this->db->update('demo', $data);
        //或者 $this->db->set('key','value');
        $data = ['name' => 'nihao'];
        $bool = $this->db->update('demo', $data, ['id' => 3]); //update_batch()
        //修改id爲3的記錄name修改成nihao
        var_dump($bool);//成功則返回TURE
    }

刪除

public function del()
    {
//        $this->db->where('id', 6);
//        $this->db->delete('demo');
        //等價於
        $bool = $this->db->delete('demo',array('id'=>5));//返回布爾值

    }

操做session

// 使用session
$this->load->library('session');
// 設置session
$data = array(
    'username'  => 'johndoe',
    'email'     => 'johndoe@some-site.com',
    'logged_in' => TRUE
);
// 設置時間, 也可在config.php中設置
$this->session->sess_expiration = '14400';
// 僅添加一個值
$this->session->set_userdata('info', $data);
// 添加多個值
// $this->session->set_userdata($data);
// 檢查某個 session 值是否存在
$this->session->has_userdata('info');
// 獲取session
$info = $this->session->userdata('info');
// or
$info = $this->session->info;
// 刪除單個session
$this->session->unset_userdata('info');
// 同時刪除多個值
// $array_items = array('username', 'email');
// $this->session->unset_userdata($array_items);

操做cookie

// 加載輔助函數
$this->load->helper('cookie');
// 添加cookie
setcookie("name", 'lds', 86500);
// or
$this->input->set_cookie("name", 'lds', 60);

// 獲取cookie
$name = get_cookie('name');

// 刪除一條 Cookie
delete_cookie('name');
// 刪除多條 Cookie
delete_cookie(['name', 'email']);
相關文章
相關標籤/搜索