PHP フレームワーク kohana
-
Upload
rie-nakau -
Category
Technology
-
view
4.961 -
download
7
description
Transcript of PHP フレームワーク kohana
![Page 1: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/1.jpg)
PHPフレームワーク
Kohana
中右 理絵
2012.05.12 PHPカンファレンス関西2012
![Page 2: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/2.jpg)
自己紹介
• 名前: 中右理絵
• Twitter: @Nakau
• 職業: プログラマー
• 活動: Kohana日本ユーザ会、他
![Page 3: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/3.jpg)
コンテンツ• Kohanaとは
• Kohanaの特徴
• HMVCとカスケーディングファイルシステム
• Kohanaの仕組みを利用して出来ること
• 質疑応答
![Page 4: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/4.jpg)
Kohanaとは
![Page 5: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/5.jpg)
Kohana
• PHP
• Webアプリケーションフレームワーク
• オープンソース
• BSDライセンス
![Page 6: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/6.jpg)
現在のKohana
• 安定版 3.2.0
• サポート版 3.1.2
• 開発中 3.3.0-RC2
![Page 7: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/7.jpg)
Kohanaで作られたサイト
site PV/DAY
NationalGeoGraphic Kids http://kids.nationalgeographic.com/kids/
990万
Couch Surfinghttp://couchsurfing.org 310万
WE PAYhttps://wepay.com/
200万
※PVはGoole adplannerから
![Page 8: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/8.jpg)
Kohanaの特徴
![Page 9: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/9.jpg)
比較CakePHP symfony2 Kohana
PHP ver 4.3.2 5.3.2 5.3.0
ライセンス MIT MIT BSD
アーキテクチャ MVC MVC HMVC
プラグイン 可 可 可/独立コード生成 ○ ○ −
![Page 10: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/10.jpg)
Kohanaの特徴
• 軽量、高速
• HMVC、オブジェクト指向設計
• カスケーディングファイルシステム
![Page 11: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/11.jpg)
PHP5ベース• Kohana 3.2.xでは PHP 5.3 以上が必須
• メリット
• コードがシンプル、高速
• デメリット
• サーバ環境を選ぶ
![Page 12: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/12.jpg)
軽量、高速
• The Swift Framework
• ライブラリフリー
• PEAR不要
• PCRE UTF-8 / SPL / Reflection / Filters / Iconv / mbstring が必須
![Page 13: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/13.jpg)
HMVCとカスケーディングファイルシステム
![Page 14: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/14.jpg)
HMVC
• 複数のMVCパターンを階層状に組み合わせる
• 個々のMVCは独立して動作
• プログラム間の依存関係を小さくする
• モジュールの修正、拡張を容易にする
• オブジェクト指向のメリットを強化
![Page 15: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/15.jpg)
MVC
Controller
Model View
![Page 16: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/16.jpg)
HMVCController
Model View
Controller
Model View
Controller
Model View
親 / 子
親 / 子
Layer: 1
Layer: 2
Layer: 3
![Page 17: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/17.jpg)
KohanaのMVC
• 独立したMVC
• system
• modules ※複数
• application
![Page 18: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/18.jpg)
system層
• Kohanaのコア
• コアクラスとそれを透過的に拡張したクラスを備える
• Kohanaをアップグレードするときを除き、変更することは無い
![Page 19: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/19.jpg)
modules層• アプリケーションで使う部品化された機能
• メールフォーム、ORM、キャッシュ ...etc
• modulesディレクトリ以下に格納
• Kohanaに含まれるモジュール
• auth / cache / codebench / database / image / orm / unittest
![Page 20: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/20.jpg)
apllication層• アプリケーションを実装する
• 部品化しない、そのアプリ特有の機能
• ルーティング(URLと機能の対応)
• ビジネスロジック
• サイトのデザイン
![Page 21: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/21.jpg)
KohanaのHMVC
• application , 各module , system それぞれが独立したMVC
• moduleはapplicationが無くても動く
• カスケーディングファイルシステムでより便利に
![Page 22: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/22.jpg)
• フレームワーク上の擬似的なファイルシステム
• カスケーディング=滝のように流れ落ちる
• ある地点で水を塞き止めると、それより下段に水はいかない
• ある地点で水に何か入れると、それより下段には水と混ざった何かが流れる
カスケーディング ファイルシステム
http://www.flickr.com/photos/f1rstborn/1895693283/
![Page 23: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/23.jpg)
カスケーディング ファイルシステム
• 階段状の構造 = Kohanaのファイル配置規則
• application , modules , system ディレクトリ
• 優先順位 application > modules > system
• moduleはいくつでも増やせる
• application > module1 > module2 > system
![Page 24: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/24.jpg)
カスケーディング ファイルシステム
• 滝のような性質 = Kohanaのソース採用ルール
• ソース = PHPソース、画像、CSS ...etc
• 同名ファイルは上位を優先 (塞き止め)
• 同名設定ファイルは設定値をマージ (何か入れる)
![Page 25: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/25.jpg)
• applicationが最上位、systemが最下位
ファイル検索の例
![Page 26: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/26.jpg)
• Kohana::find_file(‘views’,‘kohana/error’);
例1
![Page 27: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/27.jpg)
• Kohana::find_file(‘classes’,‘cookie’);
例2
![Page 28: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/28.jpg)
• Kohana::config->load(‘database’);
例3
Config/ database.php
![Page 29: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/29.jpg)
Kohana::find_file
• Kohanaのファイル検索関数
• Kohana::auto_load()や各種Factoryメソッド内で使用
• マッチするファイルパスを返す
public static find_file( string $dir , string $file [, string $ext = NULL , boolean $array = bool FALSE ] )
![Page 30: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/30.jpg)
Kohana::find_file
• 引数
• $dir - - - ディレクトリ名
• $file - - - ファイル名
• $ext - - - 拡張子(phpは省略可能)
• $array - - - 複数のファイルを配列形式で返すか
public static find_file( string $dir , string $file [, string $ext = NULL , boolean $array = bool FALSE ] )
![Page 31: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/31.jpg)
Kohana::find_file
• フレームワーク内での動作
• 設定ファイルを検索するときは$array = true
• 同一ファイル名の設定をマージして使用する
• 設定ファイル以外の検索は$array = false
• 階層構造の上位に配置されたファイルを優先
public static find_file( string $dir , string $file [, string $ext = NULL , boolean $array = bool FALSE ] )
![Page 32: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/32.jpg)
Config::load()
• Kohanaの設定読み込みメソッド
• 設定グループ名を指定する
• Kohana_Config_Groupオブジェクトを返す
• 同一設定グループ名のファイルが複数あれば、設定値をマージする
public load( string $group )
![Page 33: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/33.jpg)
Kohanaの仕組みを利用して出来ること
![Page 34: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/34.jpg)
透過的な機能拡張
• カスケーディングファイルシステムを利用
• 既存のクラスファイルを書き換えない
• 既存のクラスを利用している箇所に影響を与えない
![Page 35: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/35.jpg)
• applicationの下にcookieクラスをつくる
例)cookieクラス
![Page 36: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/36.jpg)
例:Cookieクラスclass Cookie extends Kohana_Cookie{}system/classes/cookie.php
application/classes/cookie.php
class Cookie extends Kohana_Cookie{ public function get($name){ // get処理を変更 } public function set($name,$val){ // set処理を変更 }}
![Page 37: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/37.jpg)
• Kohana::find_file(‘views’,‘kohana/error’);
例:Viewファイル
![Page 38: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/38.jpg)
例:Viewファイルsystem/view/kohana/error.php
![Page 39: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/39.jpg)
例:Viewファイルapplication/view/kohana/error.php
http://www.flickr.com/photos/fweno/5536913695/
![Page 40: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/40.jpg)
モジュールの開発と利用• モジュールが独立している
• アプリが完成しなくてもモジュールを完成させられる
• アプリに変更が合ってもモジュールに影響が無い
• モジュール開発がしやすい
• 公開モジュールの利用がしやすい
![Page 41: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/41.jpg)
例• 新規案件”○○社通販サイト”をつくろう!
• 通販サイト=アップリケーション
• 通販サイトには”お問い合わせフォーム”からメール送信する仕組みが必要!
• お問い合わせフォーム=メールフォームモジュール
![Page 42: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/42.jpg)
例• 汎用的なメールフォームモジュールを作ろう!
• 件名と本文が指定できるモジュールを作った
• 宛先は設定ファイルから読み込む
• 宛先の設定値はとりあえず仮のメールアドレス([email protected])でコミット
• この時点でテスト可能
![Page 43: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/43.jpg)
例• ”○○社通販サイト”のお問い合わせ先は”support@○○.co.jp”にしたい。
• application層に同名の設定ファイルを置く
• ”○○社通販サイト”に問い合わせる時は、お客様の名前と連絡先を入力してほしい!
• application層でモジュールを拡張
![Page 44: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/44.jpg)
git submodule
• git submoduleはモジュールのバージョン管理に最適
• サブモジュールのコミットはマスタープロジェクトに影響を与えない
• マスタープロジェクトでコミットすることでサブモジュールのある状態を履歴管理できる
![Page 45: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/45.jpg)
まとめ• Kohanaは軽量・高速なフレームワーク
• Kohanaはオブジェクト指向設計のメリットを強化した設計
• 機能の透過的な拡張が可能
• アプリケーションとモジュールを完全に分離
• モジュールの開発が容易/提供を受けやすい
![Page 47: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/47.jpg)
日本ユーザ会• 目的
• 日本語ドキュメントの提供
• 日本語によるディスカッション
• http://kohana-users.jp/
• googleグループ kohana-users.jp
![Page 48: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/48.jpg)
質疑応答
![Page 49: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/49.jpg)
おまけ
![Page 50: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/50.jpg)
公開モジュール
• 以下のサイトで公開されています
• kohana-universe
• kohana.mongeslani.com
• kohana-modules.com
![Page 51: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/51.jpg)
vendor
• 外部ライブラリを設置する場所
• カスケーディングファイルシステムの命名規則に従わなくてよい
• 手動でインクルードする必要あり
• Zendライブラリ等も使用可能
![Page 52: PHP フレームワーク kohana](https://reader031.fdocument.pub/reader031/viewer/2022012400/5580bf78d8b42ac6088b5321/html5/thumbnails/52.jpg)
デバッグページ