Advertisement

10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

kenjis
Oct. 2, 2012
Advertisement

More Related Content

Advertisement
Advertisement

10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

  1. 10分でわかるFuelPHP A simple, flexible, community driven PHP5.3 framework. 2012/5/12 @OSC Nagoya kenjis
  2. FuelPHPとは?  コミュニティで開発されている オープンソースのPHPフレームワーク  2011/7/30、初の公式リリース1.0.0  公式サイト http://fuelphp.com/
  3. FuelPHPとは?  MITライセンス  PHP 5.3以降  いろいろなフレームワークのいいとこ取り ➔ CodeIgniter ➔ Kohana ➔ Symfony ➔ Rails
  4. FuelPHPとは?  2010/後半 開発開始  2011/01/08 1.0.0-BETA1リリース  2011/07/30 1.0.0公式リリース  2011/10/25 1.1.0-RC1リリース  2011/12/13 1.1.0公式リリース  2012/05/06 1.2RC1リリース (←今ここ)
  5. FuelPHPとは?  世界第x位のPHPフレームワーク Googleトレンドによる検索数
  6. FuelPHPとは?  世界第x位のPHPフレームワーク このへん Googleトレンドによる検索数
  7. FuelPHPの利用例 http://www.owacon.info/
  8. FuelPHPの利用例 http://snipr.it/
  9. フレームワークとは?  Webアプリケーションフレームワークとは? ➔ Webアプリケーションを作成する 「枠組み」 ➔ 機能としては • 過去のプログラミングの経験則の 規約化する • 頻繁に使う機能を抽象化する (モジュール化、ライブラリ化) ➔ Webアプリケーション全体を 見通しよく開発できるようにするもの
  10. FuelPHPに向いている人  CodeIgniterを知っている人 ➔ 開発者がCodeIgniter系の人なので、 かなり似てます  Kohanaを知っている人 ➔ Kohanaも参考に作られていますので、 さらに似てます(Kohana+α=FuelPHP)  Configuration over Convention ➔ 規約が嫌いな人 ➔ CodeIgniter系のフレームワークですので、 強制的な規約は最小限になっています
  11. FuelPHPに向いている人  軽量高速なフレームワークが好きな人  フレームワークをいろいろ拡張したい人 ➔ CodeIgniterのように拡張できます  見やすいドキュメントが好きな人 ➔ CodeIgniterのユーザガイドのように 見やすいです(ただし、まだ多くの部分が英語)  コマンドラインが好きな人(嫌いでも可)
  12. FuelPHPに向いている人  他のフレームワークに挫折した人 ➔ 規約が多すぎて覚えきれない ➔ デカすぎてソース読めないから嫌
  13. FuelPHPを使うメリット  高速な動作 ➔ 軽量で動作が高速  最新のPHPフレームワーク ➔ PHP5.3以降なので、5.3の機能をフルに使 える  コードや仕様がクリーン ➔ PHP5.3でゼロから書かれたフレームワーク なので、完全にOOPであり、クリーンなコー ド ➔ PHP4を引きずっていたりしない
  14. FuelPHPを使うメリット  バランス ➔ CodeIgniterよりは広い範囲をカバーして いる ➔ ビューのレイアウト機能、モデルのCRUD機 能、認証インターフェイス、ORMなど  コマンドラインによるパワフルな機能 ➔ ScaffoldingやMigration
  15. MVCモデルとは?  Controller(コントローラ)は、 入力データに従って適切なデータを呼び出し ModelやViewの連携など、アプリケーション 全体の制御を行う  Model(モデル)は、 データベースへのアクセスやデータの修正/ 加工などのデータの管理を行う  View(ビュー)は、 処理結果の表示など、画面表示を担当する
  16. MVCモデル Controller ・リクエスト 流れの制御など 呼び出し ・データ入力 結果 結果 Model 結果 呼び出し データの管理 View 画面表示
  17. FuelPHPのフォルダ構成 公式ドキュメント アプリケーションを配置 FuelPHP本体 FuelPHPのパッケージ oilコマンド Web公開領域 フロントコントローラ
  18. FuelPHPのフォルダ構成 アプリケーションを配置 ブートストラップ キャッシュフォルダ クラスを配置 コントローラを配置 モデルを配置 ビューモデルを配置 設定ファイルを配置 言語ファイルを配置 ログフォルダ マイグレーションファイルを配置 モジュールを配置 タスクを配置 tmpフォルダ サードパーティライブラリを配置 ビューを配置
  19. FuelPHPのURLの構造  URLの構造 http://example.jp/コントローラ/メソッド/引数 http://example.jp/shop/search/123 class Controller_Shop extends Controller { ... function action_search($id) { ... } }
  20. Controller  Controllerクラスを継承  クラス名には先頭に「Controller_」を付ける  「Controller_」の後の単語の先頭は大文字  アクションメソッド名には先頭に「action_」を 付ける  ファイル名やフォルダ名はすべて小文字 (FuelPHPでの共通の規約)  クラス名の中の「_」はフォルダ区切りを意味 する
  21. Controller  action_index()メソッドはデフォルトメソッド ➔ http://example.jp/time/ fuel/app/classes/controller/time.php class Controller_Time extends Controller { public function action_index() { // タイトル $data['title'] = '時刻メッセージ'; // 現在の時刻 $data['now_time'] = date("H時i分s秒"); // テンプレートに変数を代入 return View::forge( 'time_view', $data ); } }
  22. Controller クラス名とファイル名の対応  class Controller_Time_Message ➔ controller/time/message.php ➔ http://example.jp/time/message  class Controller_Time ➔ controller/time.php ➔ function action_message() ➔ http://example.jp/time/message  両方あったら? ➔ class Controller_Timeが優先
  23. Controller URLとクラス名の対応  http://example.jp/time_message ➔ class Controller_Time_Message ➔ controller/time_message.php ➔ クラス名の「_」はフォルダ区切りになるので これは使えない → 404
  24. Controller URLとクラス名の対応  http://example.jp/time/time_message ➔ class Controller_Time ➔ controller/time.php ➔ function action_time_message() ➔ メソッド名の「_」はOK
  25. Controller 拡張したクラス  Template Controller ➔ ビューのレイアウト機能を追加したもの ➔ Controller_Templateクラスを継承する  Rest Controller ➔ RESTfulなコントローラ ➔ Controller_Restクラスを継承する  Hybrid Controller ➔ Rest Controller + Template ➔ Controller_Hybridクラスを継承する
  26. View  標準のビューファイルは、単なるPHPファイル fuel/app/view/time_view.php <html> <head> <title><?php echo $title; ?></title> </head> <body> <?php echo $now_time; ?> </body> </html> Controllerのコード $data['title'] = '時刻メッセージ'; $data['now_time'] = date("H時i分s秒"); return View::forge('time_view', $data);
  27. View  (オプション)Parserモジュール  以下のテンプレートを標準でサポート ➔ Smarty / Twig / Dwoo / PHPTAL / Mustache / Jade / Haml / Markdown  packages/parser/README.md参照
  28. Model  オプション(使わないことも可能)  ただのPHPのクラス  データベース・アクセスの方法 1. DB::query() 2. Query Builder 3. ORMパッケージ
  29. DB::query() // SQLクエリの実行 $result = DB::query('SELECT * FROM `posts`')­>execute(); // 表示処理 foreach ($result­>as_array() as $row) { echo $row['id']      . ' '; echo $row['title']   . ' '; echo $row['summary'] . '<br />'; } echo 'レコード数: ' . count($result);
  30. Query Builder // SQLクエリの実行 $result = DB::select('*')­>from('posts')­>execute(); // 表示処理 foreach ($result­>as_array() as $row) { echo $row['id']      . ' '; echo $row['title']   . ' '; echo $row['summary'] . '<br />'; } echo 'レコード数: ' . count($result);
  31. Model  Modelクラスを継承 fuel/app/classes/model/post.php class Model_Post extends Model { function find_all() { ←名前空間なし ... } } または namespace Model; class Post extends Model { function find_all() { ←名前空間あり ... } }
  32. Modelの使い方 名前空間なし  メソッドを呼び出す $data['posts'] = Model_Post::find_all(); Modelのコード class Model_Post extends Model { function find_all() { ... } }
  33. Modelの使い方 名前空間あり  メソッドを呼び出す $data['posts'] = ModelPost::find_all(); Modelのコード namespace Model; class Post extends Model { function find_all() { ... } }
  34. Model 拡張したクラス  Model_Crudクラス ➔ CRUD機能を追加したもの ➔ Model_Crudクラスを継承する
  35. ORMの使い方 1. config.phpでの設定 2. Modelの作成 3. クエリの実行
  36. ORMの使い方 1. config.phpでの設定 fuel/app/config/config.php 'always_load'  => array( 'packages'  => array( 'orm', //'auth', ), ),
  37. ORMの使い方 2. Modelの作成 fuel/app/classes/model/post.php <?php namespace Model; class Post extends OrmModel { protected static $_properties = array( 'id', 'title', 'summary', 'body',  'created_at', 'updated_at', ); protected static $_observers = array( 'OrmObserver_CreatedAt' =>  array('events'=>array('before_insert')), 'OrmObserver_UpdatedAt' =>  array('events'=>array('before_save')), ); } ※ $_propertiesでカラム名を定義する
  38. ORMの使い方 3. クエリの実行 // SQLクエリの実行 $result = ModelPost::find('all'); // 表示処理 foreach ($result as $row) { echo $row['id']      . ' '; echo $row['title']   . ' '; echo $row['summary'] . '<br />'; } echo 'レコード数: ' . count($result);
  39. Coreクラス  どんなものがあるか? Agent Date Html Mongo_Db Session Arr Debug Image Num Str Asset Event Inflector Package Theme Autoloader Fieldset Input Pagination Upload Cache File Lang Profiler Uri Cli Finder Log Redis Validation Config Form Markdown Request View Cookie Format Migrate Response Crypt Ftp Model_Crud Router Database Fuel Module Security
  40. クラスの使い方  静的な呼び出し echo Form::open('uri/to/form'); 出力されるHTML <form action="http://localhost/blog/uri/to/form"  accept­charset="utf­8" method="post">
  41. クラスの使い方  インスタンス化 $val = Validation::forge(); $val­>add('title', 'Title') ­>add_rule('required'); if ($val­>run()) { ... } else { ... }
  42. FuelPHPのセキュリティ  フールプルーフではない! ➔ フールプルーフとは? 「よくわかっていない人が扱っても安全」 -- http://e-words.jp/ ➔ ○○を使っていれば安全  ただし、FuelPHPには、 ➔ デフォルトのセキュリティ機能 ➔ 手動で利用するセキュリティ機能 • フレームワークを使わない場合より、 かなり安全
  43. FuelPHPのセキュリティ  デフォルトのセキュリティ機能 ➔ Output encoding • viewへの変数はHTMLエスケープ • config.phpのsecurity.output_filter • デフォルトはSecurity::htmlentities ➔ URL encoding • URLもHTMLエスケープ • config.phpのsecurity.uri_filter • デフォルトはSecurity::htmlentities ➔ SQL injection対策 • Query BuilderやORMでは自動エスケープ
  44. FuelPHPのセキュリティ  セキュリティ機能 ➔ Input filtering • config.phpのsecurity.input_filter ➔ CSRF保護 • 自動ではないが支援機能あり ➔ XSS filtering • HTMLawedというライブラリが付属している
  45. FuelPHPの高い拡張性  Coreクラス ➔ 継承・置き換え可能 • コアクラスを置き換えずに拡張する • コアクラスを拡張し、置き換える • パッケージからコアを拡張する
  46. 公式ドキュメントの翻訳  https://github.com/NEKOGET/FuelPHP_docs_jp  http://press.nekoget.com/fuelphp_doc/  翻訳を手伝ってくれる人を募集中
  47. FuelPHPについての日本語情報  fuelphp.jp Googleグループ https://groups.google.com/group/fuelphp_jp?hl=ja  FuelPHP まとめ Wiki http://fuelphp.phpfogapp.com/wiki/  書籍 ➔ 『FuelPHP Advent Calendar 2011』 技術評論社
  48. 『FuelPHP Advent Calendar 2011』 技術評論社より、2012年3月22日に発売! https://gihyo.jp/dp/sp/advent2011/G11C13
  49. まとめ  FuelPHPは、シンプルでフレキシブルなコミュ ニティにより開発されているPHP5.3のフレー ムワークです。  公式ドキュメントの翻訳を手伝ってくれる人を 募集しています。
Advertisement