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 (16)

PDF
CodeIgniter 2.0.X
Bo-Yi Wu
 
PDF
Introduction to CodeIgniter
Chun-Kai Wang
 
PDF
OpenWebSchool - 11 - CodeIgniter
Hung-yu Lin
 
PDF
PHP 語法基礎與物件導向
Shengyou Fan
 
PDF
第四章解答
jiannrong
 
PPT
2009 CSBB LAB 新生訓練
Abner Huang
 
PPT
網站設計100步
evercislide
 
PDF
[DCTPE2010] Drupal 模組開發入門
Drupal Taiwan
 
PDF
第九章解答
jiannrong
 
PDF
Moodle 项目帮助手册:程序编写准则
YUCHENG HU
 
PDF
Web coding principle
ZongYing Lyu
 
PPT
PHP & AppServ
Ht Wang
 
PDF
【 I Love Joomla 】- Joomla!佈景製作教學
ilovejoomla
 
PPT
Html01
Ht Wang
 
PPTX
Codeigniter 3.0 之 30 分鐘就上手
Piece Chao
 
PDF
Servlet & JSP 教學手冊第二版 - 課後練習解答
Justin Lin
 
CodeIgniter 2.0.X
Bo-Yi Wu
 
Introduction to CodeIgniter
Chun-Kai Wang
 
OpenWebSchool - 11 - CodeIgniter
Hung-yu Lin
 
PHP 語法基礎與物件導向
Shengyou Fan
 
第四章解答
jiannrong
 
2009 CSBB LAB 新生訓練
Abner Huang
 
網站設計100步
evercislide
 
[DCTPE2010] Drupal 模組開發入門
Drupal Taiwan
 
第九章解答
jiannrong
 
Moodle 项目帮助手册:程序编写准则
YUCHENG HU
 
Web coding principle
ZongYing Lyu
 
PHP & AppServ
Ht Wang
 
【 I Love Joomla 】- Joomla!佈景製作教學
ilovejoomla
 
Html01
Ht Wang
 
Codeigniter 3.0 之 30 分鐘就上手
Piece Chao
 
Servlet & JSP 教學手冊第二版 - 課後練習解答
Justin Lin
 
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