Upgrade to Pro — share decks privately, control downloads, hide ads and more …

10分でわかるFuelPHP @OSC2012 Nagoya

kenjis
May 09, 2012

10分でわかるFuelPHP @OSC2012 Nagoya

OSC2012 Nagoya用のFuelPHP紹介資料

kenjis

May 09, 2012
Tweet

More Decks by kenjis

Other Decks in Programming

Transcript

  1. 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リリース (←今ここ)
  2. フレームワークとは?  Webアプリケーションフレームワークとは? ➔Webアプリケーションを作成する 「枠組み」 ➔機能としては • 過去のプログラミングの経験則の 規約化する •

    頻繁に使う機能を抽象化する (モジュール化、ライブラリ化) ➔Webアプリケーション全体を 見通しよく開発できるようにするもの
  3. FuelPHPに向いている人  CodeIgniterを知っている人 ➔ 開発者がCodeIgniter系の人なので、 かなり似てます  Kohanaを知っている人 ➔ Kohanaも参考に作られていますので、

    さらに似てます(Kohana+α=FuelPHP)  Configuration over Convention ➔ 規約が嫌いな人 ➔ CodeIgniter系のフレームワークですので、 強制的な規約は最小限になっています
  4. FuelPHPに向いている人  軽量高速なフレームワークが好きな人  フレームワークをいろいろ拡張したい人 ➔ CodeIgniterのように拡張できます  見やすいドキュメントが好きな人 ➔

    CodeIgniterのユーザガイドのように 見やすいです(ただし、まだ多くの部分が英語)  コマンドラインが好きな人(嫌いでも可)
  5. FuelPHPを使うメリット  高速な動作 ➔軽量で動作が高速  最新のPHPフレームワーク ➔PHP5.3以降なので、5.3の機能をフルに使 える  コードや仕様がクリーン

    ➔PHP5.3でゼロから書かれたフレームワーク なので、完全にOOPであり、クリーンなコー ド ➔PHP4を引きずっていたりしない
  6. FuelPHPのフォルダ構成 アプリケーションを配置 コントローラを配置 モデルを配置 ビューモデルを配置 ビューを配置 クラスを配置 キャッシュフォルダ ブートストラップ 設定ファイルを配置

    言語ファイルを配置 ログフォルダ マイグレーションファイルを配置 モジュールを配置 タスクを配置 サードパーティライブラリを配置 tmpフォルダ
  7. Controller  Controllerクラスを継承  クラス名には先頭に「Controller_」を付ける  「Controller_」の後の単語の先頭は大文字  アクションメソッド名には先頭に「action_」を 付ける

     ファイル名やフォルダ名はすべて小文字 (FuelPHPでの共通の規約)  クラス名の中の「_」はフォルダ区切りを意味 する
  8. 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/
  9. 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が優先
  10. Controller 拡張したクラス  Template Controller ➔ビューのレイアウト機能を追加したもの ➔Controller_Templateクラスを継承する  Rest Controller

    ➔RESTfulなコントローラ ➔Controller_Restクラスを継承する  Hybrid Controller ➔Rest Controller + Template ➔Controller_Hybridクラスを継承する
  11. 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のコード
  12. View  (オプション)Parserモジュール  以下のテンプレートを標準でサポート ➔ Smarty / Twig /

    Dwoo / PHPTAL / Mustache / Jade / Haml / Markdown  packages/parser/README.md参照
  13. 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);
  14. 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);
  15. Model class Model_Post extends Model { function find_all() { ...

    } }  Modelクラスを継承 fuel/app/classes/model/post.php namespace Model; class Post extends \Model { function find_all() { ... } } または ←名前空間なし ←名前空間あり
  16. ORMの使い方 2. Modelの作成 <?php namespace Model; class Post extends \Orm\Model

    { protected static $_properties = array( 'id', 'title', 'summary', 'body', 'created_at', 'updated_at', ); protected static $_observers = array( 'Orm\Observer_CreatedAt' => array('events'=>array('before_insert')), 'Orm\Observer_UpdatedAt' => array('events'=>array('before_save')), ); } fuel/app/classes/model/post.php ※ $_propertiesでカラム名を定義する
  17. 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);
  18. 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
  19. FuelPHPのセキュリティ  フールプルーフではない! ➔フールプルーフとは? 「よくわかっていない人が扱っても安全」 -- http://e-words.jp/ ➔◦◦を使っていれば安全  ただし、FuelPHPには、

    ➔デフォルトのセキュリティ機能 ➔手動で利用するセキュリティ機能 • フレームワークを使わない場合より、 かなり安全
  20. 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では自動エスケープ
  21. FuelPHPのセキュリティ  セキュリティ機能 ➔ Input filtering • config.phpのsecurity.input_filter ➔ CSRF保護

    • 自動ではないが支援機能あり ➔ XSS filtering • HTMLawedというライブラリが付属している