SlideShare a Scribd company logo
1 of 115
Download to read offline
CodeIgniter 進階應用

    Bo-Yi Wu 吳柏毅
      2012.02.18
  http://blog.wu-boy.com/
Outline
   如何善用使用 CodeIgniter 內建函式庫
   移植及撰寫個人 Library
   擴充核心程式碼
   GetSparks 簡介
如何善用 CodeIgniter 函式庫 ?
                         3
Loader Library
系統自動初始化

                 4
如何使用



$this->load->library('class', $config, 'object')

        $this->load->library('email');

      $this->email->some_function().



                                                   5
同時載入多個函式庫




$this->load->library(array('email', 'table'));




                                                 6
傳入參數

$this->load->library('class', $config)

example: $this->load->library('email')

        $config = array (
           'mailtype' => 'html',
           'charset' => 'utf-8,
           'priority' => '1'
        );
                                         7
Library 參數初始化

public function __construct($config = array())
{
  if (count($config) > 0)
  {
      $this->initialize($config);
  }
}

           initialize 為 class 其中一個 function
                                                 8
指定物件名稱



     $this->load->library('session', $config)
        $this->session->some_function()

$this->load->library('session', $config, 'my_sess')
        $this->my_sess->some_function()



                                                      9
Config Library
系統自動初始化

                 10
系統自動讀取網站設定檔
(application/config/config.php)



                                  11
將固定資料都存放在 config 目錄

  application/config/bitly.php



                                 12
範例存放 API Key


<?php
$config['user_name'] = 'appleboy';
$config['api_key'] = 'xxxxxxxx';
$config['format'] = 'json';
?>




                                     13
取得設定檔資料




  $this->config->load('bitly');
$this->config->item('api_key');


                                  14
在這裡大家有沒有一個疑問
  假設載入兩個設定檔



               15
application/config/bitly.php
<?php
$config['user_name'] = 'appleboy';
$config['api_key'] = 'api_key_01';
$config['format'] = 'json';
?>
application/config/tiny.php
<?php
$config['user_name'] = 'appleboy46';
$config['api_key'] = 'api_key_02';
$config['format'] = 'xml';
?>                                     16
$this->config->load('bitly');
$this->config->load('tiny');



                                17
輸出資料會是 ?


$this->config->item('api_key');

      答案 : api_key_02



                                  18
為什麼資料變數會衝突呢 ?
   那該如何解決 ?


            19
系統載入流程
   檢查 application/config/ 目錄檔案是否存在
         不存在 (continue)
         存在 (include 方式載入 )



          後載入覆蓋前面設定檔


                                      20
解決變數衝突



         第二個參數設定為 true

$this->config->load('bitly', true);
$this->config->load('tiny', true);

                                      21
衝突讀取方式


              加入第三參數
$this->config->item('api_key', 'bitly');
$this->config->item('api_key', 'tiny');


                                     22
另類解決方式




item key 為什麼會出現衝突 ?


                  23
Web 程式設計師
對變數命名方式大不同
 ( 資料庫欄位命名 )
    user_name
    UserName
    username


                24
改變 key 命名方式
prefix_name + item_name


                      25
application/config/bitly.php
<?php
$config['bitly_user_name'] = 'appleboy';
$config['bitly_api_key'] = 'api_key_01';
$config['bitly_format'] = 'json';
?>
application/config/tiny.php
<?php
$config['tiny_user_name'] = 'appleboy46';
$config['tiny_api_key'] = 'api_key_02';
$config['tiny_format'] = 'xml';
?>                                          26
此命名方式可以加速
  其他程式設計師
 閱讀程式碼方便性

            27
作業一
   新增 template 設定檔
         base_title
         site_keyword
         site_description
   將設定檔內容讀出並載入到 layout




                                   28
Email Library
 大量寄信

                29
Email Class
   多重收件人
   副本 (CC) 和密件副本 (BCCs)
   支援 HTML 或者是純文字 (Plaintext) 郵件
   附件檔案
   Email Debugging tools




                                    30
$this->load->library('email');

$this->email->from('your@example.com', 'Your Name');
$this->email->to('someone@example.com');
$this->email->cc('another@another-example.com');
$this->email->bcc('them@their-example.com');

$this->email->subject('Email Test');
$this->email->message('Testing the email class.');

$this->email->send();

echo $this->email->print_debugger();

                                                       31
   $this­>email­>to()
   $this­>email­>cc()
   $this­>email­>bcc()
          可以帶入陣列或單一資料
   $this­>email­>send()

           if ( ! $this->email->send())
           {
               echo $this->email->print_debugger();
           }


                                                      32
附件檔案


    $this->email->attach('file_path')

$this->email->attach('/path/to/file01.zip');
$this->email->attach('/path/to/file02.zip');
$this->email->attach('/path/to/file03.zip');

          $this->email->send();


                                               33
File Uploading Library
     ( 多檔案上傳 )
                         34
檔案上傳流程
   設定存放上傳目錄權限
   調整 php.ini 檔案上傳設定
   建立上傳表單
   驗證使用者上傳檔案
   印出檔案訊息並且寫到資料庫




                        35
$config['upload_path'] = './uploads/';
$config['allowed_types'] = 'gif|jpg|png';
$config['max_size'] = '100';
$config['max_width'] = '1024';
$config['max_height'] = '768';

$this->load->library('upload', $config);

if ( ! $this->upload->do_upload('input_column_name'))
{
    $error = array('error' => $this->upload->display_errors());
    $this->load->view('upload_form' , $error);
}
else
{
    $data = array('upload_data' => $this->upload->data());
    $this->load->view('upload_success' , $data);           36
}
設定參數
   upload_path( 絕對或者是相對即可 )
   allowed_types( 可上傳類型用豎線 '|' 分開 )
   overwrite( 相同檔名則覆蓋 )
   max_size( 檔案大小限制 )
   max_width( 圖片專用 )
   max_height( 圖片專用 )
   encrypt_name( 檔名加密字串取代 )

                                       37
$this->upload->data()
[file_name] => mypic.jpg
[file_type] => image/jpeg
[file_path] => /path/to/your/upload/
[full_path] => /path/to/your/upload/jpg.jpg
[raw_name] => mypic
[orig_name] => mypic.jpg
[file_ext] => .jpg
[file_size] => 22.2
[is_image] => 1
[image_width] => 800
[image_height] => 600
[image_type] => jpeg
[image_size_str] => width="800" height="200"
                                               38
作業二
   新增上傳表單
        將上傳檔案資訊存入資料庫
        並且將檔案以附件寄給該使用者




                          39
Form Validation Library
      表單驗證
                          40
欄位驗證
1.  欄位包含非法字元
2.  欄位長度必須大於 minimum  
3.  欄位長度必須小於 maximum
4.  使用者名稱不能重複 ( 資料庫比對 )




                          41
Controller
$this->load->library('form_validation');

if ($this->form_validation->run() == false)
{
    $this->load->view('myform');
}
else
{
    $this->load->view('formsuccess');
}
                                              42
表單驗證規則




$this->form_validation->set_rules()



                                      43
驗證規則 ( 註冊表單 )



$this->form_validation->set_rules('username', ' 帳號 ', 'required');
$this->form_validation->set_rules('password', ' 密碼 ', 'required');
$this->form_validation->set_rules('passconf', ' 確認 ', 'required');
$this->form_validation->set_rules('email', ' 電子郵件 ', 'required');




                                                                44
Form Controller
$this->load->library('form_validation');

$this->form_validation->set_rules('username', ' 帳號 ', 'required');
$this->form_validation->set_rules('password', ' 密碼 ', 'required');
$this->form_validation->set_rules('passconf', ' 確認密碼 ', 'required');
$this->form_validation->set_rules('email', ' 電子郵件 ', 'required');

if ($this->form_validation->run() == FALSE)
{
    $this->load->view('myform');
}
else
{
    $this->load->view('formsuccess');
}
                                                                 45
多重驗證規則

$this->form_validation->set_rules('username', ' 帳號 ',
'required|min_length[5]|max_length[12]|
is_unique[users.username]');

$this->form_validation->set_rules('password', ' 密碼 ',
'required|matches[passconf]');

$this->form_validation->set_rules('passconf', ' 確認密碼 ',
'required');

$this->form_validation->set_rules('email', ' 電子郵件 ',
'required|valid_email|is_unique[users.email]');
                                                        46
事先處理欄位
$this->form_validation->set_rules('username', ' 帳號 ', 'trim|
required|min_length[5]|max_length[12]|xss_clean');

$this->form_validation->set_rules('password', ' 密碼 ', 'trim|
required|matches[passconf]|md5');

$this->form_validation->set_rules('passconf', ' 確認密碼 ',
'trim|required');

$this->form_validation->set_rules('email', ' 電子郵件 ', 'trim|
required|valid_email|is_unique[users.email]');


        htmlspecialchars, trim, MD5(native function) 皆可處理
                                                               47
記憶表單
欄位驗證失敗回到表單
顯示之前留下的資料
     $this->load->helper('form')

set_value('username', 'appleboy')
set_select('myselect', 'one', true)
set_checkbox('mycheck[]', '1', true)
set_radio('myradio', '1', true)
                                       48
自行設計驗證函數




        $this->form_validation->set_rules
('username', ' 帳號 ', 'callback_username_check')




                                            49
public function index()
{
  $this->load->library('form_validation');

   $this->form_validation->set_rules('username', ' 帳號 ',
'callback_username_check');
   $this->form_validation->set_rules('password', ' 密碼 ', 'required');
   $this->form_validation->set_rules('passconf', ' 確認密碼 ', 'required');
   $this->form_validation->set_rules('email', ' 電子郵件 ', 'required');

    if ($this->form_validation->run() == FALSE)
    {
        $this->load->view('myform');
    }
    else
    {
        $this->load->view('formsuccess');
    }
}                                                                 50
Call back function

public function username_check($str)
{
  if ($str == 'test')
  {
      return FALSE;
  }
  else
  {
      return TRUE;
  }
}

                                       51
定義錯誤訊息




$this->form_validation->set_message
        ('rule', 'error message')



                                      52
錯誤訊息


               全部顯示
  <?php echo validation_errors(); ?>
               個別顯示
<?php echo form_error('file_name'); ?>


                                       53
作業三

    使用者註冊表單
    
        欄位 :Email, 密碼 , 確認密碼
    
        撰寫 call back function 確認帳號是否存在
    
        自訂錯誤訊息




                                         54
Image Manipulation Library
      ( 影像處理 )
                             55
影像處理 (GD vs ImageMagic)
   修改尺寸
   建立縮圖
   圖片裁剪
   圖片旋轉
   浮水印




                          56
個人建議大量圖形網站用
    ImageMagic
( 支援 command line 執行 )
     ( 獨立處理圖片 )
  ( 不需要動到前端 Server)




                         57
如果公司經費許可
AWS S3 雲端儲存服務
Simple Storage Service



                         58
初始化




$this->load->library('image_lib')



                                    59
處理影像

$config['image_library'] = 'gd2';
$config['source_image'] = '/path/mypic.jpg';
$config['create_thumb'] = true;
$config['width'] = 75;
$config['height'] = 50;

$this->load->library('image_lib', $config);

$this->image_lib->resize();

                                               60
參數設定
   image_library: GD, GD2, ImageMagick, NetPBM
   library_path: Linux, Windows 底下路徑
   source_image:  絕對 / 相對路徑
   new_image:  輸出檔案絕對 / 相對路徑
   width: 圖片寬度
   height: 圖片高度
   create_thumb: 避免覆蓋原檔案

                                                  61
錯誤訊息



if ( ! $this->image_lib->resize())
{
    echo $this->image_lib->display_errors();
}



                                               62
影像處理函數
   $this­>image_lib­>resize()
   $this­>image_lib­>crop()
   $this­>image_lib­>rotate()
   $this­>image_lib­>clear()




                                 63
影像處理函數
   $this­>image_lib­>resize()
   $this­>image_lib­>crop()
   $this­>image_lib­>rotate()
   $this­>image_lib­>clear()




                                 64
務必設定
   $config['create_thumb'] = true;
   $config['new_image'] = '/path/new_image.jpg';


          避免原始檔案被處理 ( 保留原檔 )




                                                    65
影像處理函數
   $this­>image_lib­>resize()
   $this­>image_lib­>crop()
   $this­>image_lib­>rotate()
   $this­>image_lib­>clear()




                                 66
$config['image_library'] = 'imagemagick';
$config['library_path'] = '/usr/local/bin';
$config['source_image'] = '/path/to/mypic.jpg';
$config['x_axis'] = '100';
$config['y_axis'] = '60';

$this->image_lib->initialize($config);

if ( ! $this->image_lib->crop())
{
    echo $this->image_lib->display_errors();
}

                                                  67
影像處理函數
   $this­>image_lib­>resize()
   $this­>image_lib­>crop()
   $this­>image_lib­>rotate()
   $this­>image_lib­>clear()




                                 68
$config['image_library'] = 'netpbm';
$config['library_path'] = '/usr/bin/';
$config['source_image'] = '/path/to/mypic.jpg';
$config['rotation_angle'] = 'hor';

$this->image_lib->initialize($config);

if ( ! $this->image_lib->rotate())
{
    echo $this->image_lib->display_errors();
}

                                                  69
rotation_angle 參數
   90( 順時針 90 度 )
   180( 順時針 180 度 )
   270( 順時針 270 度 )
   hor( 水平旋轉 )
   vrt( 垂直旋轉 )




                            70
影像處理函數
   $this­>image_lib­>resize()
   $this­>image_lib­>crop()
   $this­>image_lib­>rotate()
   $this­>image_lib­>clear()




                                 71
$this->image_lib->clear()
      重置所有設定項目




                            72
作業
   增加使用者頭像上傳
        限制上傳檔案型態 (jpeg,jpg,png,gif)
        可以自訂圖像 ( 隨時更改 )
        製作縮圖顯示於使用者列表




                                       73
Language Library
  ( 多國語系 )
                   74
兩個存放語系目錄
   application/language/[english|zh­tw]
   system/language/[english|zh­tw]
   先後讀取

        application/config/config.php 設定預設語系




                                           75
建立語言檔案
   檔案命名方式
         error_lang.php
   內容以 $lang 陣列方式表示
         $lang['language_key'] = " 我是中文 ";




                                              76
$lang['error_email'] = " 您必須填入電子郵件 ";
$lang['error_url'] = " 您必須填入完整網址 ";
$lang['error_username'] = " 您必須填入帳號名稱 ";

      避免衝突



                                       77
讀取語言檔案




$this->lang->load('filename', 'language')



                                      78
讀取資料


   Language helper 函式

lang('language_key')

 $this->load->helper('language');

                                    79
作業
   請用下列 URL 切換中英文語系
        index.php/controller/function?lang=zh­tw




                                                    80
Pagination Library
  ( 分頁處理 )
                     81
$this->load->library('pagination');

$config['base_url'] = '/index.php/test/page/';
$config['total_rows'] = 200;
$config['per_page'] = 20;

$this->pagination->initialize($config);

echo $this->pagination->create_links();


                                                 82
分頁參數
   base_url: 完整的 URL 路徑 , 包含了控制器
      (controller)/ 函數 (function)
   total_rows: 總筆數
   per_page: 單頁顯示幾筆
   uri_segment: URI 哪個部份包含了頁數
   num_links: 您目前所在頁數前面跟後面所顯示的
      分頁數量
   use_page_numbers: 用 page number 顯示
                                         83
講了這麼多 CodeIgniter 內建 Library
 那該如何撰寫屬於自己的套件呢

                           84
如果別人寫好的 Library
 該如何無痛導入到
   CodeIgniter


                  85
注意事項
   檔案命名
        一律採用小寫命名 , 如 my_class.php
   類別宣告
        類別宣告第一個字母必須為大寫 , 如 class 
          My_class




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

class Someclass {

    public function some_function()
    {
    }
}

/* End of file Someclass.php */

                                                    87
初始化類別傳遞參數




$params = array('type' => 'large', 'color' => 'red');

   $this->load->library('someclass', $params);




                                                    88
public function __construct($config = array())
{
  If ( ! empty($config))
  {
      $this->initialize($config);
  }
}


                                             89
在 Library 裡該如何使用
CodeIgniter 其他資源呢 ?



                      90
$this->load->helper('url');
$this->load->library('session');
$this->config->item('base_url');



                                   91
$this->_obj =& get_instance();




                                 92
public function __construct()
{
  $this->_obj =& get_instance();
  $this->_obj->load->config('google_url_api');
}




                                             93
作業
   建立個人專用 Library
   將 goo.gl php library 導入
          http://code.google.com/p/googl­php/




                                                 94
網站一定會有共同處理的地方
     ( 多國語系 )
( 多重登入 Facebook,Google)



                          95
如果有 10 個 Controller
  那不就 10 個檔案
 都加上相同程式碼?



                      96
這時候就需要

擴充核心函式庫

           97
class Welcome_01 extends CI_Controller
  class Welcome_02 extends CI_Controller
  class Welcome_03 extends CI_Controller
  class Welcome_04 extends CI_Controller
  class Welcome_05 extends CI_Controller
  class Welcome_06 extends CI_Controller
  class Welcome_07 extends CI_Controller
  class Welcome_08 extends CI_Controller

Controller 都需要有共同的變數及函數


                                           98
class Welcome_01 extends MY_Controller
class Welcome_02 extends MY_Controller
class Welcome_03 extends MY_Controller
class Welcome_04 extends MY_Controller
class Welcome_05 extends MY_Controller
class Welcome_06 extends MY_Controller
class Welcome_07 extends MY_Controller
class Welcome_08 extends MY_Controller

更改變數及函數則大家一起變動


                                         99
CI_Controller




控制器 01   控制器 02   控制器 03   控制器 04   控制器 05




登入函式     登入函式     登入函式     登入函式     登入函式



                                             100
CI_Controller


             MY_Controller

                  登入模組




控制器 01   控制器 02   控制器 03   控制器 04   控制器 05

                                             101
直接更換核心類別
   放置目錄 application/core/
   更換 input 核心
           application/core/input.php


    class CI_Input {
            public function __construct() {}
    }

                                               102
擴充核心類別
   類別宣告必須繼承父類別
   新類別名稱與檔名必須使用 MY_ 前置字串
           命名 : application/core/MY_Input.php

    class MY_Input extends CI_Input {

            function __construct()
            {
              parent::__construct();
            }
    }                                            103
自訂子類別的前置字串



編輯 application/config/config.php

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


                                      104
作業
   練習擴充 CI_Controller 核心
         index.php/welcome/?lang=english
         index.php/welcome/?lang=zh­tw
   擴充核心取得 $_GET['lang'] 變數資料
         利用此變數將 language 檔案載入實現多國語系




                                            105
目標
   會員註冊系統
        Email 認証信
        Form 表單驗證
   多國語系
   會員資料編輯
        個人照片上傳
   會員登入


                          106
CodeIgniter 核心功能
不夠網站開發需求嘛 ?



                   107
歡迎使用
CodeIgniter getsparks



                        108
What is Sparks?


 Ruby 有 RubyGems
  Node.js 有 npm
CodeIgniter 有 sparks



                       109
What is Sparks?



Package Management System

    Making Code Easy to
 Find, Create, and Distribute

                                110
Get Sparks tool Now!!




        一行指令就安裝完成
php -r "$(curl -fsSL http://getsparks.org/go-
                   sparks)"



                                            111
Load Sparks Library




 $this->load->spark(google-url-shortener/1.0.4');
$short_url = $this->google_url_api->shorten($url);
   echo $url . " => " . $short_url->id . "<br />";




                                                112
Installing getsparks library




                http://goo.gl/lHmCX
$ php tools/spark install -v1.0.4 google-url-shortener




                                                   113
今天課程就到這裡
大家有任何問題嘛


           114
謝謝大家
對於 CodeIgniter 有任何問題
    可以到論壇留言
 http://www.codeigniter.org.tw/forum/




                                        115

More Related Content

What's hot

Discuz技术交流
Discuz技术交流Discuz技术交流
Discuz技术交流pigso
 
LazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHPLazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHPLin Yo-An
 
深入了解Memcache
深入了解Memcache深入了解Memcache
深入了解Memcachezubin Jiang
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practicelitaocheng
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试Yiwei Ma
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學Bo-Yi Wu
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoloadjay li
 
部分PHP问题总结[转贴]
部分PHP问题总结[转贴]部分PHP问题总结[转贴]
部分PHP问题总结[转贴]wensheng wei
 
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘Liu Allen
 
jsp基础速成精华讲解
jsp基础速成精华讲解jsp基础速成精华讲解
jsp基础速成精华讲解wensheng wei
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析Justin Lin
 
第一次用 PHPUnit 寫測試就上手
第一次用 PHPUnit 寫測試就上手第一次用 PHPUnit 寫測試就上手
第一次用 PHPUnit 寫測試就上手Yi-Ming Huang
 
cfm to php training
cfm to php training cfm to php training
cfm to php training Chonpin HSU
 
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇OpenEJB - 另一個選擇
OpenEJB - 另一個選擇Justin Lin
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作Shengyou Fan
 
Mongodb
MongodbMongodb
Mongodbbj
 
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会Joseph Chiang
 

What's hot (20)

Discuz技术交流
Discuz技术交流Discuz技术交流
Discuz技术交流
 
LazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHPLazyRecord: The Fast ORM for PHP
LazyRecord: The Fast ORM for PHP
 
深入了解Memcache
深入了解Memcache深入了解Memcache
深入了解Memcache
 
Erlang Practice
Erlang PracticeErlang Practice
Erlang Practice
 
Puppet安装测试
Puppet安装测试Puppet安装测试
Puppet安装测试
 
PHP & MySQL 教學
PHP & MySQL 教學PHP & MySQL 教學
PHP & MySQL 教學
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
Javascript autoload
Javascript autoloadJavascript autoload
Javascript autoload
 
部分PHP问题总结[转贴]
部分PHP问题总结[转贴]部分PHP问题总结[转贴]
部分PHP问题总结[转贴]
 
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
课题一:PHP5.3、PHP5.4的特性介绍与深度挖掘
 
jsp基础速成精华讲解
jsp基础速成精华讲解jsp基础速成精华讲解
jsp基础速成精华讲解
 
深入淺出 Web 容器 - Tomcat 原始碼分析
深入淺出 Web 容器  - Tomcat 原始碼分析深入淺出 Web 容器  - Tomcat 原始碼分析
深入淺出 Web 容器 - Tomcat 原始碼分析
 
第一次用 PHPUnit 寫測試就上手
第一次用 PHPUnit 寫測試就上手第一次用 PHPUnit 寫測試就上手
第一次用 PHPUnit 寫測試就上手
 
cfm to php training
cfm to php training cfm to php training
cfm to php training
 
OpenEJB - 另一個選擇
OpenEJB - 另一個選擇OpenEJB - 另一個選擇
OpenEJB - 另一個選擇
 
Migrations 與 Schema操作
Migrations 與 Schema操作Migrations 與 Schema操作
Migrations 與 Schema操作
 
Node way
Node wayNode way
Node way
 
Mongodb
MongodbMongodb
Mongodb
 
不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会不断归零的前端人生 - 2016 中国软件开发者大会
不断归零的前端人生 - 2016 中国软件开发者大会
 
Ooredis
OoredisOoredis
Ooredis
 

Viewers also liked

How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsBo-Yi Wu
 
Introduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript ConferenceIntroduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript ConferenceBo-Yi Wu
 
Gearman work queue in php
Gearman work queue in phpGearman work queue in php
Gearman work queue in phpBo-Yi Wu
 
You must know about CodeIgniter Popular Library
You must know about CodeIgniter Popular LibraryYou must know about CodeIgniter Popular Library
You must know about CodeIgniter Popular LibraryBo-Yi Wu
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作Bo-Yi Wu
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel frameworkBo-Yi Wu
 
PHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding stylePHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding styleBo-Yi Wu
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式Bo-Yi Wu
 
RESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkRESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkBo-Yi Wu
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golangBo-Yi Wu
 
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxyBo-Yi Wu
 
Git Flow and JavaScript Coding Style
Git Flow and JavaScript Coding StyleGit Flow and JavaScript Coding Style
Git Flow and JavaScript Coding StyleBo-Yi Wu
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to gitBo-Yi Wu
 
How to choose web framework
How to choose web frameworkHow to choose web framework
How to choose web frameworkBo-Yi Wu
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Bo-Yi Wu
 
Automating your workflow with Gulp.js
Automating your workflow with Gulp.jsAutomating your workflow with Gulp.js
Automating your workflow with Gulp.jsBo-Yi Wu
 
Introduction to Android G Sensor I²C Driver on Android
Introduction to Android G Sensor I²C Driver on AndroidIntroduction to Android G Sensor I²C Driver on Android
Introduction to Android G Sensor I²C Driver on AndroidBo-Yi Wu
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgnitermirahman
 
CodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.comCodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.comChristopher Cubos
 

Viewers also liked (20)

How to integrate front end tool via gruntjs
How to integrate front end tool via gruntjsHow to integrate front end tool via gruntjs
How to integrate front end tool via gruntjs
 
Introduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript ConferenceIntroduction to Grunt.js on Taiwan JavaScript Conference
Introduction to Grunt.js on Taiwan JavaScript Conference
 
Gearman work queue in php
Gearman work queue in phpGearman work queue in php
Gearman work queue in php
 
You must know about CodeIgniter Popular Library
You must know about CodeIgniter Popular LibraryYou must know about CodeIgniter Popular Library
You must know about CodeIgniter Popular Library
 
Git flow 與團隊合作
Git flow 與團隊合作Git flow 與團隊合作
Git flow 與團隊合作
 
Why to choose laravel framework
Why to choose laravel frameworkWhy to choose laravel framework
Why to choose laravel framework
 
PHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding stylePHP & JavaScript & CSS Coding style
PHP & JavaScript & CSS Coding style
 
用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式用 Docker 改善團隊合作模式
用 Docker 改善團隊合作模式
 
RESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP FrameworkRESTful API Design & Implementation with CodeIgniter PHP Framework
RESTful API Design & Implementation with CodeIgniter PHP Framework
 
Write microservice in golang
Write microservice in golangWrite microservice in golang
Write microservice in golang
 
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
 
Git Flow and JavaScript Coding Style
Git Flow and JavaScript Coding StyleGit Flow and JavaScript Coding Style
Git Flow and JavaScript Coding Style
 
Introduction to git
Introduction to gitIntroduction to git
Introduction to git
 
How to choose web framework
How to choose web frameworkHow to choose web framework
How to choose web framework
 
Docker 基礎介紹與實戰
Docker 基礎介紹與實戰Docker 基礎介紹與實戰
Docker 基礎介紹與實戰
 
Automating your workflow with Gulp.js
Automating your workflow with Gulp.jsAutomating your workflow with Gulp.js
Automating your workflow with Gulp.js
 
Introduction to Android G Sensor I²C Driver on Android
Introduction to Android G Sensor I²C Driver on AndroidIntroduction to Android G Sensor I²C Driver on Android
Introduction to Android G Sensor I²C Driver on Android
 
ACL in CodeIgniter
ACL in CodeIgniterACL in CodeIgniter
ACL in CodeIgniter
 
CodeIgniter 3.0
CodeIgniter 3.0CodeIgniter 3.0
CodeIgniter 3.0
 
CodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.comCodeIgniter - PHP MVC Framework by silicongulf.com
CodeIgniter - PHP MVC Framework by silicongulf.com
 

Similar to advanced introduction to codeigniter

Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and DesignHo Kim
 
6kbbs vulnerability report
6kbbs vulnerability report6kbbs vulnerability report
6kbbs vulnerability reportinsight-labs
 
Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniterChun-Kai Wang
 
Laradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHLaradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHSzuping Wang
 
[DCTPE2010] Drupal 模組開發入門
[DCTPE2010] Drupal 模組開發入門[DCTPE2010] Drupal 模組開發入門
[DCTPE2010] Drupal 模組開發入門Drupal Taiwan
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层yiditushe
 
Zencart网站模板复制过程
Zencart网站模板复制过程Zencart网站模板复制过程
Zencart网站模板复制过程xiaochenlbm
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作Shengyou Fan
 
Php应用程序常见安全问题解析
Php应用程序常见安全问题解析Php应用程序常见安全问题解析
Php应用程序常见安全问题解析mysqlops
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要yiditushe
 
Yui3入门
Yui3入门Yui3入门
Yui3入门cly84920
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文Guo Albert
 
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术hoopchina
 
淺談C#物件導向與DesignPattern.pdf
淺談C#物件導向與DesignPattern.pdf淺談C#物件導向與DesignPattern.pdf
淺談C#物件導向與DesignPattern.pdfBrian Chou 周家禾
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训lotusprince
 

Similar to advanced introduction to codeigniter (20)

Web Caching Architecture and Design
Web Caching Architecture and DesignWeb Caching Architecture and Design
Web Caching Architecture and Design
 
CRUD 綜合運用
CRUD 綜合運用CRUD 綜合運用
CRUD 綜合運用
 
6kbbs vulnerability report
6kbbs vulnerability report6kbbs vulnerability report
6kbbs vulnerability report
 
Introduction to CodeIgniter
Introduction to CodeIgniterIntroduction to CodeIgniter
Introduction to CodeIgniter
 
Laradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTHLaradebut #7 - Laravel AUTH
Laradebut #7 - Laravel AUTH
 
[DCTPE2010] Drupal 模組開發入門
[DCTPE2010] Drupal 模組開發入門[DCTPE2010] Drupal 模組開發入門
[DCTPE2010] Drupal 模組開發入門
 
用Jquery实现拖拽层
用Jquery实现拖拽层用Jquery实现拖拽层
用Jquery实现拖拽层
 
nodejs开发web站点
nodejs开发web站点nodejs开发web站点
nodejs开发web站点
 
Zencart网站模板复制过程
Zencart网站模板复制过程Zencart网站模板复制过程
Zencart网站模板复制过程
 
JQuery Plugin
JQuery PluginJQuery Plugin
JQuery Plugin
 
Migrations 與 Schema 操作
Migrations 與 Schema 操作Migrations 與 Schema 操作
Migrations 與 Schema 操作
 
Php应用程序常见安全问题解析
Php应用程序常见安全问题解析Php应用程序常见安全问题解析
Php应用程序常见安全问题解析
 
Spring入门纲要
Spring入门纲要Spring入门纲要
Spring入门纲要
 
Structs2簡介
Structs2簡介 Structs2簡介
Structs2簡介
 
Yui3入门
Yui3入门Yui3入门
Yui3入门
 
Spring 2.x 中文
Spring 2.x 中文Spring 2.x 中文
Spring 2.x 中文
 
J query
J queryJ query
J query
 
PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术PHPUnit + Xdebug 单元测试技术
PHPUnit + Xdebug 单元测试技术
 
淺談C#物件導向與DesignPattern.pdf
淺談C#物件導向與DesignPattern.pdf淺談C#物件導向與DesignPattern.pdf
淺談C#物件導向與DesignPattern.pdf
 
Asp.net mvc 培训
Asp.net mvc 培训Asp.net mvc 培训
Asp.net mvc 培训
 

More from Bo-Yi Wu

Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Bo-Yi Wu
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構Bo-Yi Wu
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in GolangBo-Yi Wu
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and PracticeBo-Yi Wu
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub ActionsBo-Yi Wu
 
Drone 1.0 Feature
Drone 1.0 FeatureDrone 1.0 Feature
Drone 1.0 FeatureBo-Yi Wu
 
Drone CI/CD Platform
Drone CI/CD PlatformDrone CI/CD Platform
Drone CI/CD PlatformBo-Yi Wu
 
GraphQL IN Golang
GraphQL IN GolangGraphQL IN Golang
GraphQL IN GolangBo-Yi Wu
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介Bo-Yi Wu
 
drone continuous Integration
drone continuous Integrationdrone continuous Integration
drone continuous IntegrationBo-Yi Wu
 
Gorush: A push notification server written in Go
Gorush: A push notification server written in GoGorush: A push notification server written in Go
Gorush: A push notification server written in GoBo-Yi Wu
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台Bo-Yi Wu
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構Bo-Yi Wu
 
Introduction to Gitea with Drone
Introduction to Gitea with DroneIntroduction to Gitea with Drone
Introduction to Gitea with DroneBo-Yi Wu
 
運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率Bo-Yi Wu
 
用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務Bo-Yi Wu
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps BotBo-Yi Wu
 
A painless self-hosted Git service: Gitea
A painless self-hosted Git service: GiteaA painless self-hosted Git service: Gitea
A painless self-hosted Git service: GiteaBo-Yi Wu
 

More from Bo-Yi Wu (18)

Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署Drone CI/CD 自動化測試及部署
Drone CI/CD 自動化測試及部署
 
用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構用 Go 語言打造多台機器 Scale 架構
用 Go 語言打造多台機器 Scale 架構
 
Job Queue in Golang
Job Queue in GolangJob Queue in Golang
Job Queue in Golang
 
Golang Project Layout and Practice
Golang Project Layout and PracticeGolang Project Layout and Practice
Golang Project Layout and Practice
 
Introduction to GitHub Actions
Introduction to GitHub ActionsIntroduction to GitHub Actions
Introduction to GitHub Actions
 
Drone 1.0 Feature
Drone 1.0 FeatureDrone 1.0 Feature
Drone 1.0 Feature
 
Drone CI/CD Platform
Drone CI/CD PlatformDrone CI/CD Platform
Drone CI/CD Platform
 
GraphQL IN Golang
GraphQL IN GolangGraphQL IN Golang
GraphQL IN Golang
 
Go 語言基礎簡介
Go 語言基礎簡介Go 語言基礎簡介
Go 語言基礎簡介
 
drone continuous Integration
drone continuous Integrationdrone continuous Integration
drone continuous Integration
 
Gorush: A push notification server written in Go
Gorush: A push notification server written in GoGorush: A push notification server written in Go
Gorush: A push notification server written in Go
 
用 Drone 打造 輕量級容器持續交付平台
用 Drone 打造輕量級容器持續交付平台用 Drone 打造輕量級容器持續交付平台
用 Drone 打造 輕量級容器持續交付平台
 
用 Go 語言 打造微服務架構
用 Go 語言打造微服務架構用 Go 語言打造微服務架構
用 Go 語言 打造微服務架構
 
Introduction to Gitea with Drone
Introduction to Gitea with DroneIntroduction to Gitea with Drone
Introduction to Gitea with Drone
 
運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率運用 Docker 整合 Laravel 提升團隊開發效率
運用 Docker 整合 Laravel 提升團隊開發效率
 
用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務用 Go 語言實戰 Push Notification 服務
用 Go 語言實戰 Push Notification 服務
 
用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot用 Go 語言打造 DevOps Bot
用 Go 語言打造 DevOps Bot
 
A painless self-hosted Git service: Gitea
A painless self-hosted Git service: GiteaA painless self-hosted Git service: Gitea
A painless self-hosted Git service: Gitea
 

advanced introduction to codeigniter