Successfully reported this slideshow.

10分でわかるFuelPHP @ OSC2013 Nagoya

9

Share

Loading in …3
×
1 of 54
1 of 54

More Related Content

Related Books

Free with a 30 day trial from Scribd

See all

10分でわかるFuelPHP @ OSC2013 Nagoya

  1. 1. 10分でわかるFuelPHP A simple, flexible, community driven PHP 5.3 framework. 2013/06/22 @ OSC2013 Nagoya kenjis
  2. 2. FuelPHPとは?  コミュニティで開発されている オープンソースのPHPフレームワーク  2011/7/30、初の公式リリース1.0.0  公式サイト http://fuelphp.com/
  3. 3. FuelPHPとは?  MITライセンス  PHP 5.3以降  いろいろなフレームワークのいいとこ取り ➔CodeIgniter ➔Kohana ➔Symfony ➔Rails
  4. 4. FuelPHPとは?  2010/末 開発開始  2011/01/08 1.0.0-BETA1リリース  2011/07/30 1.0リリース  2011/12/13 1.1リリース  2012/06/03 1.2リリース  2012/09/09 1.3リリース  2012/11/09 1.4リリース  2013/01/20 1.5リリース  2013/05/03 1.6リリース  2013/06/09 1.6.1リリース (←今ここ)
  5. 5. FuelPHPとは?  日本での4大PHPフレームワークの1つ http://c4sa.nifty.com/
  6. 6. FuelPHPとは?  日本での4大PHPフレームワークの1つ http://www.paperboy.co.jp/news/201306121300
  7. 7. FuelPHPとは?  はてなブックマーク数(3ユーザ以上) ➔CakePHP    4,926 ➔Symfony    1,961 ➔Zend Framework 829 ➔FuelPHP      632 ➔CodeIgniter    495        (2013/6/21調べ)
  8. 8. FuelPHPの利用例 http://sp.demae-can.com/
  9. 9. FuelPHPの利用例 http://animita.tv/
  10. 10. FuelPHPの利用例 http://bushidotickets.com/
  11. 11. フレームワークとは?  Webアプリケーションフレームワークとは? ➔Webアプリケーションを作成する「枠組み」 ➔機能としては • 過去のプログラミングの経験則の規約化 • 頻繁に使う機能を抽象化(モジュール化、 ライブラリ化) ➔Webアプリケーション全体を見通しよく 開発できるようにするもの
  12. 12. FuelPHPに向いている人  CodeIgniterを知っている人 ➔開発者がCodeIgniter系の人なので、かなり 似ている  Kohanaを知っている人 ➔Kohanaも参考に作られていますので、さらに 似ている(Kohana+α=FuelPHP)  Configuration over Convention ➔規約が嫌いな人 ➔CodeIgniter系のフレームワークなので、 強制的な規約は最小限になっている
  13. 13. FuelPHPに向いている人  軽量高速なフレームワークが好きな人  フレームワークをいろいろ拡張したい人 ➔CodeIgniterのように拡張できます  見やすいドキュメントが好きな人 ➔CodeIgniterのユーザガイドのように 見やすいです(ただし、翻訳率は現在 64%程度)  コマンドラインが好きな人(嫌いでも可)
  14. 14. FuelPHPに向いている人  他のフレームワークに挫折した人 ➔ドキュメントがわかりにくい ➔規約が多すぎて覚えきれない ➔デカすぎてソースが読めない ➔難しすぎる
  15. 15. FuelPHPを使うメリット  高速な動作 ➔軽量で動作が高速  最新のPHPフレームワーク ➔PHP 5.3以降なので、5.3の機能をフルに 使える  コードや仕様がクリーン ➔PHP 5.3でゼロから書かれたフレームワー クなので、完全にOOPであり、クリーンな コード ➔PHP4を引きずっていたりしない
  16. 16. FuelPHPを使うメリット  バランス ➔CodeIgniterよりは広い範囲をカバー している(多機能) ➔ビューのレイアウト機能、モデルの CRUD機能、HMVC、認証インターフェ イス、ORM、PHPUnitでのテストなど  コマンドラインによるパワフルな機能 ➔ScaffoldingやMigration
  17. 17. MVCモデルとは?  Controller(コントローラ)は、 入力データに従って適切なデータを呼び出し ModelやViewの連携など、アプリケーショ ン全体の制御を行う  Model(モデル)は、 データベースへのアクセスやデータの修正/ 加工などのデータの管理を行う  View(ビュー)は、 処理結果の表示など、画面表示を担当する
  18. 18. MVCモデル Controller 流れの制御など View 画面表示 Model データの管理 ・リクエスト ・データ入力 結果 結果 結果 呼び出し 呼び出し
  19. 19. FuelPHPのフォルダ構成 公式ドキュメント アプリケーションを配置 FuelPHP本体 FuelPHPのパッケージ oilコマンド Web公開領域 フロントコントローラ css、img、js Composerのパッケージ
  20. 20. FuelPHPのフォルダ構成 アプリケーションを配置 コントローラを配置 モデルを配置 ビューモデルを配置 ビューを配置 クラスを配置 キャッシュフォルダ ブートストラップ 設定ファイルを配置 言語ファイルを配置 ログフォルダ DBマイグレーションファイルを配置 モジュール(HMVC)を配置 タスク(CLIから起動するクラス)を配置 tmpフォルダ テスト(PHPUnit)を配置
  21. 21. FuelPHPのURLの構造  URLの構造 http://example.jp/コントローラ/メソッド/引数 class Controller_Shop extends Controller { ... function action_search($id) { ... } } http://example.jp/shop/search/123
  22. 22. Controller  Controllerクラスを継承  クラス名には先頭に「Controller_」を付ける  「Controller_」の後の単語の先頭は大文字  アクションメソッド名には先頭に「action_」を 付ける  ファイル名やフォルダ名はすべて小文字 (FuelPHPでの共通の規約)  クラス名の中の「_」はフォルダ区切りになる
  23. 23. Controller class Controller_Time extends Controller { public function action_index() { // タイトル $data['title'] = '時刻メッセージ'; // 現在の時刻 $data['now_time'] = date("H時i分s秒"); // テンプレートに変数を代入 return View::forge( 'time_view', $data ); } } fuel/app/classes/controller/time.php  action_index()メソッドはデフォルトメソッド ➔http://example.jp/time/
  24. 24. 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
  25. 25. Controller URLとクラス名の対応  http://example.jp/time_message ? ➔class Controller_Time_Message ? ➔controller/time_message.php ? ➔クラス名の「_」はフォルダ区切りにな るのでこれは使えない ➔404 Not Found  規約に外れるものはルーティング設定が 必要
  26. 26. Controller URLとクラス名の対応  http://example.jp/time/time_message ➔class Controller_Time ➔controller/time.php ➔function action_time_message() ➔メソッド名の「_」はOK
  27. 27. Controller 拡張したクラス  Template Controller ➔ビューのレイアウト機能を追加したもの ➔Controller_Templateクラスを継承する  Rest Controller ➔RESTfulなコントローラ ➔Web APIがすぐに作成できる ➔Controller_Restクラスを継承する  Hybrid Controller ➔Rest Controller + Template ➔Controller_Hybridクラスを継承する
  28. 28. View <html> <head> <title><?php echo $title; ?></title> </head> <body> <?php echo $now_time; ?> </body> </html> fuel/app/view/time_view.php  標準のビューファイルは、単なるPHPファイル $data['title'] = '時刻メッセージ'; $data['now_time'] = date("H時i分s秒"); return View::forge('time_view', $data); Controllerのコード
  29. 29. View  (オプション)Parserモジュール  以下のテンプレートを標準でサポート ➔Smarty / Twig / Dwoo / PHPTAL / Mustache / Jade / Haml / Markdown  packages/parser/README.md参照
  30. 30. Model  オプション(使わないことも可能)  ただのPHPのクラス  データベース・アクセスの方法 ➔DB::query() ➔Query Builder ➔Model_Crud ➔ORMパッケージ
  31. 31. 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);
  32. 32. 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);
  33. 33. Model class Model_Post extends Model { function find_all() { ... } }  Modelクラスを継承 fuel/app/classes/model/post.php
  34. 34. Modelの使い方  メソッドを呼び出す $data['posts'] = Model_Post::find_all(); class Model_Post extends Model { function find_all() { ... } } Modelのコード
  35. 35. Model 拡張したクラス  Model_Crudクラス ➔CRUD用メソッドを追加したもの ➔Model_Crudクラスを継承する
  36. 36. ORMの使い方 1. config.phpでの設定 2. Modelの作成 3. クエリの実行
  37. 37. ORMの使い方 1. config.phpでの設定 'always_load'  => array( 'packages'  => array( 'orm', //'auth', ), ), fuel/app/config/config.php
  38. 38. ORMの使い方 2. Modelの作成 <?php class Model_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')), ); } fuel/app/classes/model/post.php ※ $_propertiesでカラム名を定義する
  39. 39. ORMの使い方 3. クエリの実行 // SQLクエリの実行 $result = Model_Post::find('all'); // 表示処理 foreach ($result as $row) { echo $row['id']      . ' '; echo $row['title']   . ' '; echo $row['summary'] . '<br />'; } echo 'レコード数: ' . count($result);
  40. 40. ORM Model 拡張したクラス  OrmModel_Soft ➔論理削除  OrmModel_Temporal ➔データのバージョン管理  OrmModel_Nestedset ➔階層構造のデータ  その他 ➔ORM ModelでEAV(Entity- Attribute-Value)モデルを扱う機能
  41. 41. Coreクラス  どんなものがあるか? Agent Arr Asset Autoloader Cache Cli Config Cookie Crypt Database Date Debug Event Fieldset File Finder Form Format Ftp Fuel Html Image Inflector Input Lang Log Markdown Migrate Model_Crud Module Mongo_Db Num Package Pagination Profiler Redis Request Response Router Security Session Str Theme Upload Uri Validation View
  42. 42. クラスの使い方  静的な呼び出し <form action="http://localhost/blog/uri/to/form"  accept­charset="utf­8" method="post"> echo Form::open('uri/to/form'); 出力されるHTML
  43. 43. クラスの使い方  インスタンス化 $val = Validation::forge(); $val­>add('title', 'Title') ­>add_rule('required'); if ($val­>run()) { ... } else { ... }
  44. 44. FuelPHPのセキュリティ  フールプルーフではない! ➔フールプルーフとは? 「よくわかっていない人が扱っても安全」 -- http://e-words.jp/ ➔○○を使っていれば安全  ただし、FuelPHPには、 ➔デフォルトのセキュリティ機能 ➔手動で利用するセキュリティ機能 • フレームワークを使わない場合より、 かなり安全
  45. 45. 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では自動エスケープ
  46. 46. FuelPHPのセキュリティ  セキュリティ機能 ➔Input filtering • config.phpのsecurity.input_filter ➔CSRF保護 • 自動ではないが支援機能あり ➔XSS filtering • HTMLawedというライブラリが付属
  47. 47. FuelPHPの高い拡張性  Coreクラス ➔継承・置き換え可能 • コアクラスを置き換えずに拡張する • コアクラスを拡張し、置き換える • パッケージからコアを拡張する
  48. 48. 公式ドキュメントの翻訳  https://github.com/NEKOGET/FuelPHP_docs_jp  http://fuelphp.jp/  翻訳を手伝ってくれる人を募集中
  49. 49. FuelPHPについての日本語情報  FuelPHP まとめ Wiki http://wiki.fuelphp1st.com/wiki/
  50. 50. FuelPHPについての 日本語コミュニティ  fuelphp.jp Googleグループ https://groups.google.com/group/fuelphp_jp?hl=ja  twitter 「fuelphp」で検索 https://twitter.com/search/realtime?q=fuelphp&src=typd  facebook FuelPHP日本語ニュース https://www.facebook.com/jp.fuel
  51. 51. FuelPHPについての書籍  『FuelPHP Advent Calendar 2011』技術評論社  『FuelPHP入門』ソーテック社  『はじめてのフレームワークとしてのFuelPHP』 達人出版会  『FuelPHP Advent Calendar 2012』達人出版会
  52. 52. FuelPHPについての書籍 無料 無料
  53. 53. まとめ  FuelPHPは、シンプルでフレキシブルな コミュニティにより開発されているPHP 5.3のフレームワークです。  日本のユーザも増え、採用事例も増えて きました。  公式ドキュメントの翻訳を手伝ってくれ る人を募集しています。
  54. 54. このファイルのライセンス  This work is licensed under the Creative Commons 表示 - 継承 3.0 非 移植 License. To view a copy of this license, visit http://creativecommons.org/licen ses/by-sa/3.0/.

×