SlideShare a Scribd company logo
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 (20)

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

Viewers also liked (20)

PDF
How to integrate front end tool via gruntjs
Bo-Yi Wu
 
PDF
Introduction to Grunt.js on Taiwan JavaScript Conference
Bo-Yi Wu
 
PDF
Gearman work queue in php
Bo-Yi Wu
 
PDF
You must know about CodeIgniter Popular Library
Bo-Yi Wu
 
PPTX
Git flow 與團隊合作
Bo-Yi Wu
 
PPTX
Why to choose laravel framework
Bo-Yi Wu
 
PPTX
PHP & JavaScript & CSS Coding style
Bo-Yi Wu
 
PPTX
用 Docker 改善團隊合作模式
Bo-Yi Wu
 
PDF
RESTful API Design & Implementation with CodeIgniter PHP Framework
Bo-Yi Wu
 
PPTX
Write microservice in golang
Bo-Yi Wu
 
PDF
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
Bo-Yi Wu
 
PPTX
Git Flow and JavaScript Coding Style
Bo-Yi Wu
 
PDF
Introduction to git
Bo-Yi Wu
 
PPTX
How to choose web framework
Bo-Yi Wu
 
PPTX
Docker 基礎介紹與實戰
Bo-Yi Wu
 
PDF
Automating your workflow with Gulp.js
Bo-Yi Wu
 
PPT
Introduction to Android G Sensor I²C Driver on Android
Bo-Yi Wu
 
PDF
ACL in CodeIgniter
mirahman
 
KEY
CodeIgniter 3.0
Phil Sturgeon
 
PDF
CodeIgniter - PHP MVC Framework by silicongulf.com
Christopher Cubos
 
How to integrate front end tool via gruntjs
Bo-Yi Wu
 
Introduction to Grunt.js on Taiwan JavaScript Conference
Bo-Yi Wu
 
Gearman work queue in php
Bo-Yi Wu
 
You must know about CodeIgniter Popular Library
Bo-Yi Wu
 
Git flow 與團隊合作
Bo-Yi Wu
 
Why to choose laravel framework
Bo-Yi Wu
 
PHP & JavaScript & CSS Coding style
Bo-Yi Wu
 
用 Docker 改善團隊合作模式
Bo-Yi Wu
 
RESTful API Design & Implementation with CodeIgniter PHP Framework
Bo-Yi Wu
 
Write microservice in golang
Bo-Yi Wu
 
2014 OSDC Talk: Introduction to Percona XtraDB Cluster and HAProxy
Bo-Yi Wu
 
Git Flow and JavaScript Coding Style
Bo-Yi Wu
 
Introduction to git
Bo-Yi Wu
 
How to choose web framework
Bo-Yi Wu
 
Docker 基礎介紹與實戰
Bo-Yi Wu
 
Automating your workflow with Gulp.js
Bo-Yi Wu
 
Introduction to Android G Sensor I²C Driver on Android
Bo-Yi Wu
 
ACL in CodeIgniter
mirahman
 
CodeIgniter 3.0
Phil Sturgeon
 
CodeIgniter - PHP MVC Framework by silicongulf.com
Christopher Cubos
 
Ad

Similar to advanced introduction to codeigniter (20)

PPTX
Web Caching Architecture and Design
Ho Kim
 
PDF
CRUD 綜合運用
Shengyou Fan
 
PDF
6kbbs vulnerability report
insight-labs
 
PDF
Introduction to CodeIgniter
Chun-Kai Wang
 
PDF
Laradebut #7 - Laravel AUTH
Szuping Wang
 
PDF
[DCTPE2010] Drupal 模組開發入門
Drupal Taiwan
 
DOC
用Jquery实现拖拽层
yiditushe
 
ODP
nodejs开发web站点
xiaojueqq12345
 
DOC
Zencart网站模板复制过程
xiaochenlbm
 
PPT
JQuery Plugin
Jason Wang
 
PDF
Migrations 與 Schema 操作
Shengyou Fan
 
PDF
Php应用程序常见安全问题解析
mysqlops
 
DOC
Spring入门纲要
yiditushe
 
PPT
Structs2簡介
catonchuang
 
PPTX
Yui3入门
cly84920
 
PDF
Spring 2.x 中文
Guo Albert
 
PPTX
J query
waitcat
 
PPTX
PHPUnit + Xdebug 单元测试技术
hoopchina
 
PDF
淺談C#物件導向與DesignPattern.pdf
Brian Chou 周家禾
 
PPT
Asp.net mvc 培训
lotusprince
 
Web Caching Architecture and Design
Ho Kim
 
CRUD 綜合運用
Shengyou Fan
 
6kbbs vulnerability report
insight-labs
 
Introduction to CodeIgniter
Chun-Kai Wang
 
Laradebut #7 - Laravel AUTH
Szuping Wang
 
[DCTPE2010] Drupal 模組開發入門
Drupal Taiwan
 
用Jquery实现拖拽层
yiditushe
 
nodejs开发web站点
xiaojueqq12345
 
Zencart网站模板复制过程
xiaochenlbm
 
JQuery Plugin
Jason Wang
 
Migrations 與 Schema 操作
Shengyou Fan
 
Php应用程序常见安全问题解析
mysqlops
 
Spring入门纲要
yiditushe
 
Structs2簡介
catonchuang
 
Yui3入门
cly84920
 
Spring 2.x 中文
Guo Albert
 
J query
waitcat
 
PHPUnit + Xdebug 单元测试技术
hoopchina
 
淺談C#物件導向與DesignPattern.pdf
Brian Chou 周家禾
 
Asp.net mvc 培训
lotusprince
 
Ad

More from Bo-Yi Wu (18)

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

advanced introduction to codeigniter