「code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜
DESCRIPTION
2011年2月19日(土)に東京で開催された「CodeIgniterカンファレンス2011 (CodeIgniter Con 2011, Tokyo Japan)にてプレゼンテーションした内容です。http://cicon.codeigniter.jp/2011/主にCodeIgniter 2.0.0で、ソースを読むメリット、拡張のしかたの概要を述べています。TRANSCRIPT
![Page 1: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/1.jpg)
「CodeIgniter」を読もう。~ソースコードから知る仕様や拡張方法~
加賀 誠人@makotokagaproject92.com
この作品はクリエイティブ・コモンズ 表示 - 非営利 - 継承 2.1 日本 ライセンスの下に提供されています。
![Page 2: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/2.jpg)
about me
•加賀 誠人 (かが まこと)
![Page 3: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/3.jpg)
about me
•加賀 誠人 (かが まこと)• @makotokaga
![Page 4: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/4.jpg)
about me
•加賀 誠人 (かが まこと)• @makotokaga • http://project92.com
![Page 5: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/5.jpg)
about me
•加賀 誠人 (かが まこと)• @makotokaga • http://project92.com• フリーランスのウェブエンジニア
![Page 6: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/6.jpg)
about me
•加賀 誠人 (かが まこと)• @makotokaga • http://project92.com• フリーランスのウェブエンジニア• PHPとの出会いはPHP/FI 2.0のころ
![Page 7: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/7.jpg)
about me
•加賀 誠人 (かが まこと)• @makotokaga • http://project92.com• フリーランスのウェブエンジニア• PHPとの出会いはPHP/FI 2.0のころ• CodeIgniter歴は4カ月ほど
![Page 8: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/8.jpg)
CodeIgniterのソースコードを読むべき3つの理由
![Page 9: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/9.jpg)
CodeIgniterのソースコードを読むべき3つの理由•細かい振る舞いを理解できる
![Page 10: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/10.jpg)
CodeIgniterのソースコードを読むべき3つの理由•細かい振る舞いを理解できる• CodeIgniterを拡張するには理解するところから
![Page 11: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/11.jpg)
CodeIgniterのソースコードを読むべき3つの理由•細かい振る舞いを理解できる• CodeIgniterを拡張するには理解するところから•コンパクトだから読むのが簡単
![Page 12: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/12.jpg)
CodeIgniterのソースコードを読むべき3つの理由•細かい振る舞いを理解できる• CodeIgniterを拡張するには理解するところから•コンパクトだから読むのが簡単
ソースを使え、ルーク!Use the Source, Luke!
Evil Preacher / http://predicadormalvado.blogspot.com/Illustration by
![Page 13: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/13.jpg)
主要フレームワークとの行数の比較
![Page 14: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/14.jpg)
0 250,000 500,000 750,000 1,000,000
43,044
45,439
190,022
300,891
468,480
949,707
CodeIgniter 1.7.3
CodeIgnter 2.0.0
CakePHP 1.3.7
symfony 1.4.9
Zend Framework 1.11.3 Minimal
Zend Framework 1.11.3 Full
主要フレームワークとの行数の比較
•配布パッケージ中の *.php ファイルの行数を集計•コメント行や空行を含みます
![Page 15: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/15.jpg)
コンパクトということは……
![Page 16: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/16.jpg)
コンパクトということは……
• CodeIgniterは機能がシンプル• お仕着せでないよさ
![Page 17: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/17.jpg)
コンパクトということは……
• CodeIgniterは機能がシンプル• お仕着せでないよさ•マニュアル(User Guide)を読むのに多くの時間を要さない
![Page 18: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/18.jpg)
コンパクトということは……
• CodeIgniterは機能がシンプル• お仕着せでないよさ•マニュアル(User Guide)を読むのに多くの時間を要さない•ソースを読んで深く理解するのにも多くの時間を要さない• すぐに使いこなせるツールとなる
![Page 19: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/19.jpg)
細かい振る舞いを理解できる
•例題1 Template Parser Classで、
とした場合の振る舞いってどうなるのか?
{entries}...{/entries}{entries}...{/entries}
![Page 20: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/20.jpg)
細かい振る舞いを理解できる
•例題1 Template Parser Classで、
とした場合の振る舞いってどうなるのか?• ドキュメントには書かれてないが、ソースを読めば一目瞭然
{entries}...{/entries}{entries}...{/entries}
![Page 21: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/21.jpg)
CodeIgniterを拡張するには、理解するところから•標準の機能がシンプルであるため、CodeIgniterの機能を拡張することは、特別なことじゃない!
![Page 22: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/22.jpg)
ディレクトリ構成~ 1.7.3以前と2.0.0以降の違い
![Page 23: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/23.jpg)
ディレクトリ構成~ 1.7.3以前と2.0.0以降の違い•おおきく整理され理解しやすくなった
![Page 24: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/24.jpg)
ディレクトリ構成~ 1.7.3以前と2.0.0以降の違い•おおきく整理され理解しやすくなった• 標準ではsystemディレクトリの配下にあったapplicationディレクトリは、systemディレクトリと同階層に
![Page 25: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/25.jpg)
ディレクトリ構成~ 1.7.3以前と2.0.0以降の違い•おおきく整理され理解しやすくなった• 標準ではsystemディレクトリの配下にあったapplicationディレクトリは、systemディレクトリと同階層に• コアクラスとその他のライブラリのディレクトリが分離された
![Page 26: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/26.jpg)
CodeIgniter 2.0.0のディレクトリ構成
![Page 27: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/27.jpg)
CodeIgniter 2.0.0のディレクトリ構成
index.php
system
application
![Page 28: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/28.jpg)
CodeIgniter 2.0.0のディレクトリ構成
core
database
libraries
helpers
index.php
system
application
![Page 29: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/29.jpg)
CodeIgniter 2.0.0のディレクトリ構成
core
database
libraries
helpers
index.php
system
application
configcontrollers
viewsmodels
![Page 30: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/30.jpg)
CodeIgniter 2.0.0のディレクトリ構成
core
database
libraries
helpers
core
libraries
helpers
index.php
system
application
configcontrollers
viewsmodels
![Page 31: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/31.jpg)
CodeIgniterの起動時の動きを追う①• フロントコントローラ「index.php」
![Page 32: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/32.jpg)
CodeIgniterの起動時の動きを追う①• フロントコントローラ「index.php」• 最初に呼び出され実行される
![Page 33: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/33.jpg)
CodeIgniterの起動時の動きを追う①• フロントコントローラ「index.php」• 最初に呼び出され実行される• system/applicationディレクトリのパスを決定
![Page 34: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/34.jpg)
CodeIgniterの起動時の動きを追う①• フロントコントローラ「index.php」• 最初に呼び出され実行される• system/applicationディレクトリのパスを決定• ファイルパスについての定数の定義
![Page 35: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/35.jpg)
CodeIgniterの起動時の動きを追う①• フロントコントローラ「index.php」• 最初に呼び出され実行される• system/applicationディレクトリのパスを決定• ファイルパスについての定数の定義• core/CodeIgniter.phpへ処理を引き継ぐ
![Page 36: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/36.jpg)
CodeIgniterの起動時の動きを追う①• フロントコントローラ「index.php」• 最初に呼び出され実行される• system/applicationディレクトリのパスを決定• ファイルパスについての定数の定義• core/CodeIgniter.phpへ処理を引き継ぐ
• このファイルだけはDocumentRoot以下に置く必要がある
![Page 37: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/37.jpg)
CodeIgniterの起動時の動きを追う②•フロントコントローラ「index.php」で初期化される定数
![Page 38: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/38.jpg)
CodeIgniterの起動時の動きを追う②•フロントコントローラ「index.php」で初期化される定数
SELF フロントコントローラのファイル名。通常は「index.php」
EXT PHPファイルの拡張子BASEPATH systemディレクトリの絶対パスAPPPATH applicationディレクトリのパス
FCPATH フロントコントローラのあるディレクトリの絶対パス
SYSDIR systemディレクトリの名前。通常は「system」
![Page 39: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/39.jpg)
CodeIgniterの起動時の動きを追う②•フロントコントローラ「index.php」で初期化される定数
SELF フロントコントローラのファイル名。通常は「index.php」
EXT PHPファイルの拡張子BASEPATH systemディレクトリの絶対パスAPPPATH applicationディレクトリのパス
FCPATH フロントコントローラのあるディレクトリの絶対パス
SYSDIR systemディレクトリの名前。通常は「system」
![Page 40: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/40.jpg)
CodeIgniterの起動時の動きを追う②•フロントコントローラ「index.php」で初期化される定数
SELF フロントコントローラのファイル名。通常は「index.php」
EXT PHPファイルの拡張子BASEPATH systemディレクトリの絶対パスAPPPATH applicationディレクトリのパス
FCPATH フロントコントローラのあるディレクトリの絶対パス
SYSDIR systemディレクトリの名前。通常は「system」
![Page 41: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/41.jpg)
CodeIgniterの起動時の動きを追う②•フロントコントローラ「index.php」で初期化される定数
SELF フロントコントローラのファイル名。通常は「index.php」
EXT PHPファイルの拡張子BASEPATH systemディレクトリの絶対パスAPPPATH applicationディレクトリのパス
FCPATH フロントコントローラのあるディレクトリの絶対パス
SYSDIR systemディレクトリの名前。通常は「system」
![Page 42: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/42.jpg)
CodeIgniterの起動時の動きを追う②•フロントコントローラ「index.php」で初期化される定数
SELF フロントコントローラのファイル名。通常は「index.php」
EXT PHPファイルの拡張子BASEPATH systemディレクトリの絶対パスAPPPATH applicationディレクトリのパス
FCPATH フロントコントローラのあるディレクトリの絶対パス
SYSDIR systemディレクトリの名前。通常は「system」
![Page 43: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/43.jpg)
CodeIgniterの起動時の動きを追う②•フロントコントローラ「index.php」で初期化される定数
SELF フロントコントローラのファイル名。通常は「index.php」
EXT PHPファイルの拡張子BASEPATH systemディレクトリの絶対パスAPPPATH applicationディレクトリのパス
FCPATH フロントコントローラのあるディレクトリの絶対パス
SYSDIR systemディレクトリの名前。通常は「system」
![Page 44: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/44.jpg)
CodeIgniterの起動時の動きを追う③• system/core/CodeIgniter.php
![Page 45: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/45.jpg)
CodeIgniterの起動時の動きを追う③• system/core/CodeIgniter.php• リクエストの実行~終了までの流れを制御
![Page 46: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/46.jpg)
CodeIgniterの起動時の動きを追う③• system/core/CodeIgniter.php• リクエストの実行~終了までの流れを制御• Common.phpのロード
![Page 47: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/47.jpg)
CodeIgniterの起動時の動きを追う③• system/core/CodeIgniter.php• リクエストの実行~終了までの流れを制御• Common.phpのロード• コアシステムクラスのロード
![Page 48: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/48.jpg)
CodeIgniterの起動時の動きを追う③• system/core/CodeIgniter.php• リクエストの実行~終了までの流れを制御• Common.phpのロード• コアシステムクラスのロード• constants.php、config.phpの読み込み
![Page 49: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/49.jpg)
CodeIgniterの起動時の動きを追う③• system/core/CodeIgniter.php• リクエストの実行~終了までの流れを制御• Common.phpのロード• コアシステムクラスのロード• constants.php、config.phpの読み込み• アプリケーションControllerのロードと実行
![Page 50: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/50.jpg)
CodeIgniterの起動時の動きを追う③• system/core/CodeIgniter.php• リクエストの実行~終了までの流れを制御• Common.phpのロード• コアシステムクラスのロード• constants.php、config.phpの読み込み• アプリケーションControllerのロードと実行• フックの実行
![Page 51: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/51.jpg)
CodeIgniterの起動時の動きを追う③• system/core/CodeIgniter.php• リクエストの実行~終了までの流れを制御• Common.phpのロード• コアシステムクラスのロード• constants.php、config.phpの読み込み• アプリケーションControllerのロードと実行• フックの実行• 必要ならDB接続のクローズ
![Page 52: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/52.jpg)
CodeIgniterの起動時の動きを追う④• system/core/Common.php
![Page 53: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/53.jpg)
CodeIgniterの起動時の動きを追う④• system/core/Common.php• CodeIgniterの実行に必要な関数を定義する
![Page 54: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/54.jpg)
CodeIgniterの起動時の動きを追う④• system/core/Common.php• CodeIgniterの実行に必要な関数を定義する• &load_class()
![Page 55: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/55.jpg)
CodeIgniterの起動時の動きを追う④• system/core/Common.php• CodeIgniterの実行に必要な関数を定義する• &load_class()• ファイルからクラスをロード
![Page 56: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/56.jpg)
CodeIgniterの起動時の動きを追う④• system/core/Common.php• CodeIgniterの実行に必要な関数を定義する• &load_class()• ファイルからクラスをロード• &get_config()
![Page 57: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/57.jpg)
CodeIgniterの起動時の動きを追う④• system/core/Common.php• CodeIgniterの実行に必要な関数を定義する• &load_class()• ファイルからクラスをロード• &get_config()• config.phpを読み込み
![Page 58: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/58.jpg)
CodeIgniterの起動時の動きを追う④• system/core/Common.php• CodeIgniterの実行に必要な関数を定義する• &load_class()• ファイルからクラスをロード• &get_config()• config.phpを読み込み• などなど
![Page 59: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/59.jpg)
CodeIgniterの起動時の動きを追う⑤• system/core/CodeIgniter.phpがロードするコアクラスCI_Benchmark 実行速度を計測するCI_Hooks フックの機能を提供CI_Config 設定ファイルの読み込みCI_Utf8 UTF-8サポートCI_URI URIの操作CI_Router URIのルーティングCI_Output 出力の制御
CI_Input POST、COOKIE、SERVERデータの取得や、XSSフィルタなど
CI_Lang メッセージの国際化
![Page 60: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/60.jpg)
CodeIgniterの起動時の動きを追う⑥•ロードされたコアクラスは、CI_Controllerのコンストラクタでメンバ変数に設定される• コントローラ内で、以下のようにアクセスできる$this->output->set_header();
![Page 61: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/61.jpg)
CodeIgniterの起動時の動きを追う⑦• system/core/CodeIgniter.phpが読み込むファイル
• CI_Controllerのコンストラクタがロードするクラス
CI_Controller アプリケーションControllerの基底クラス(core/Controller.php)
CI_Loader ViewやModel、database、ヘルパー、ライブラリを読み込む
$this->load->view('welcome_message');
![Page 62: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/62.jpg)
アプリケーションコントローラからアクセスできるコアクラスCI_Benchmark $this->benchmark
CI_Hooks $this->hook
CI_Config $this->config
CI_Utf8 $this->utf8
CI_URI $this->uri
CI_Router $this->router
CI_Output $this->output
CI_Input $this->input
CI_Lang $this->lang
CI_Loader $this->load
CI_Log $this->logコアクラスではないが、ログを有効にすると以下もロードされる
![Page 63: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/63.jpg)
CodeIgniterの拡張手段
![Page 64: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/64.jpg)
CodeIgniterの拡張手段
•フック
![Page 65: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/65.jpg)
CodeIgniterの拡張手段
•フック•コアクラスのカスタマイズ
![Page 66: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/66.jpg)
CodeIgniterの拡張手段
•フック•コアクラスのカスタマイズ•標準ライブラリ、ヘルパのカスタマイズ
![Page 67: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/67.jpg)
CodeIgniterの拡張手段
•フック•コアクラスのカスタマイズ•標準ライブラリ、ヘルパのカスタマイズ•ライブラリ、ヘルパの追加
![Page 68: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/68.jpg)
CodeIgniterの拡張手段
•フック•コアクラスのカスタマイズ•標準ライブラリ、ヘルパのカスタマイズ•ライブラリ、ヘルパの追加•ドライバ
![Page 69: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/69.jpg)
コアシステムクラスを拡張する
![Page 70: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/70.jpg)
コアシステムクラスを拡張する
• 完全に置き換えることも、継承して拡張することも可能。• いずれも application/core/ にファイルを置く
![Page 71: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/71.jpg)
コアシステムクラスを拡張する
• 完全に置き換えることも、継承して拡張することも可能。• いずれも application/core/ にファイルを置く
• コアクラスを置き換える場合• 「CI_」で始まるクラス名
![Page 72: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/72.jpg)
コアシステムクラスを拡張する
• 完全に置き換えることも、継承して拡張することも可能。• いずれも application/core/ にファイルを置く
• コアクラスを置き換える場合• 「CI_」で始まるクラス名• コアクラスを拡張する場合• 「MY_」で始まるクラス名• 「CI_」で始まるクラスを継承
![Page 73: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/73.jpg)
コアクラスを置き換える
• CI_Outputを置き換える場合• system/core/Output.phpを削除• バグ? or 仕様? ~1.7.3と違う• application/core/Output.php
• CI_Controllerは置き換えできない
![Page 74: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/74.jpg)
コアクラスを置き換える
• CI_Outputを置き換える場合• system/core/Output.phpを削除• バグ? or 仕様? ~1.7.3と違う• application/core/Output.php
• CI_Controllerは置き換えできない
<?phpclass CI_Output { function __construct() { ... }}
![Page 75: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/75.jpg)
コアクラスを拡張する
•たとえば、CI_Controllerを拡張する場合• application/core/MY_Controller.php
![Page 76: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/76.jpg)
コアクラスを拡張する
•たとえば、CI_Controllerを拡張する場合• application/core/MY_Controller.php<?php
class MY_Controller extends CI_Controller {
function __construct() {
parent::__construct();
}
}
![Page 77: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/77.jpg)
ライブラリを拡張する
![Page 78: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/78.jpg)
ライブラリを拡張する
•基本的にコアクラスと同じ
![Page 79: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/79.jpg)
ライブラリを拡張する
•基本的にコアクラスと同じ• 置き換えるか拡張するか
![Page 80: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/80.jpg)
ライブラリを拡張する
•基本的にコアクラスと同じ• 置き換えるか拡張するか• 置き換える場合、単にapplication/libraryにファイルを置けばよい
![Page 81: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/81.jpg)
ライブラリを拡張する
•基本的にコアクラスと同じ• 置き換えるか拡張するか• 置き換える場合、単にapplication/libraryにファイルを置けばよい• system/coreに同名ファイルが残ってても無視される
![Page 82: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/82.jpg)
宣伝!
![Page 83: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/83.jpg)
宣伝!
• PostgreSQL Conference 2011
![Page 84: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/84.jpg)
宣伝!
• PostgreSQL Conference 2011
• 2011年 2月 25日(金)開催 来週!
![Page 85: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/85.jpg)
宣伝!
• PostgreSQL Conference 2011
• 2011年 2月 25日(金)開催 来週!• 10:00~17:40
![Page 86: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/86.jpg)
宣伝!
• PostgreSQL Conference 2011
• 2011年 2月 25日(金)開催 来週!• 10:00~17:40• AP品川 (品川駅高輪口 徒歩3分)
![Page 87: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/87.jpg)
宣伝!
• PostgreSQL Conference 2011
• 2011年 2月 25日(金)開催 来週!• 10:00~17:40• AP品川 (品川駅高輪口 徒歩3分)• 主催: 日本PostgreSQLユーザ会(JPUG)
![Page 88: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/88.jpg)
宣伝!
• PostgreSQL Conference 2011
• 2011年 2月 25日(金)開催 来週!• 10:00~17:40• AP品川 (品川駅高輪口 徒歩3分)• 主催: 日本PostgreSQLユーザ会(JPUG)• 参加費 3,500 円(懇親会は別途 3,500 円)
![Page 89: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/89.jpg)
宣伝!
• PostgreSQL Conference 2011
• 2011年 2月 25日(金)開催 来週!• 10:00~17:40• AP品川 (品川駅高輪口 徒歩3分)• 主催: 日本PostgreSQLユーザ会(JPUG)• 参加費 3,500 円(懇親会は別途 3,500 円)
• チケット販売 ~2月25日
![Page 90: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/90.jpg)
宣伝!
• PostgreSQL Conference 2011
• 2011年 2月 25日(金)開催 来週!• 10:00~17:40• AP品川 (品川駅高輪口 徒歩3分)• 主催: 日本PostgreSQLユーザ会(JPUG)• 参加費 3,500 円(懇親会は別途 3,500 円)
• チケット販売 ~2月25日 http://www.postgresql.jp
![Page 91: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/91.jpg)
![Page 92: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/92.jpg)
The Source will be with you, always.
@makotokagahttp://project92.com
![Page 93: 「Code igniter」を読もう。〜ソースコードから知る仕様や拡張方法〜](https://reader038.vdocuments.net/reader038/viewer/2022103117/559a300b1a28ab86478b4632/html5/thumbnails/93.jpg)