Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

はじめての FuelPHP

30,801 views

Published on

Published in: Technology
  • Be the first to comment

はじめての FuelPHP

  1. 1. はじめての FuelPHP Jul. 8, 2012 FuelPHP 勉強会 東京 sho <sho@codeigniter.jp>
  2. 2. 本発表の主な対象者PHP で Web アプリをつくったことがある && フレームワークを使ってみたい
  3. 3. もくじ• FuelPHP とは• インストール• MVC• 便利な機能• 参考情報
  4. 4. とは
  5. 5. 参考: http://fuelphp.com/
  6. 6. FuelPHP とは オープンソースの PHP (>=5.3) フレームワーク MIT License (*1) • 無償で無制限に扱って良い (ソースコードの公開義務なし) • 著作権表示、許諾表示をソフトウェアのすべての複製 または重要な部分に記載しなければならない • 作者はソフトウェアに関してなんら責任を負わない 2011年 7月に登場 CodeIgniter ライク*1 参考: http://ja.wikipedia.org/wiki/MIT_License
  7. 7. 特徴 AN (H)MVC FRAMEWORK • MVC モデルに準拠 MODULAR AND EXTENDABLE TO A FAULT • 気に入らない部分は拡張可能参考: http://fuelphp.com/features
  8. 8. 特徴SECURITY • XSS、CSRF、SQL インジェクションの対策 etc.OIL: THE POWER OF THE COMMAND LINE • 強力なコマンドライン (使わなくても良い) • コードの生成、DB マイグレーション、 デバッグ etc.
  9. 9. 特徴BASE CLASSES FOR CONTROLLERS AND MODELS • 高機能な基底クラス • Controller_Rest, Model_Crud etc.POWERFUL YET LIGHTWEIGHT ORM INCLUDED • 強力な OR マッパ • CRUD (Create / Read/ Update / Delete) • belongs-to, has-one, has-many, many-many
  10. 10. 特徴AUTHENTIFICATION FRAMEWORK • 認証機能を簡単に実装可能USE ANY TEMPLATE PARSER FOR YOUR VIEWS • 様々なテンプレートパーサに対応 • mustache, Markdown, Smarty, Twig, Haml, Jade, Dwoo, PHPTAL
  11. 11. Namespace (PHP >= 5.3) クラス、関数、定数の衝突を避ける機能 • namespace <空間名>; <?php 関同 数じ を名 namespace hoge¥fuga; function myFunc() { echo ¥hoge¥fuga . "¥n"; } 定前 義の namespace hoge¥moge; でク function myFunc() { echo ¥hoge¥moge . "¥n"; } きラ るス や myFunc(); // ¥hoge¥moge ¥hoge¥fuga¥myFunc(); // ¥hoge¥fuga namespace hoge; fuga¥myFunc(); // ¥hoge¥fuga参考: http://www.php.net/manual/ja/language.namespaces.definition.php
  12. 12. インストール
  13. 13. インストール (Mac, Unix) Quick Installation: $ curl get.fuelphp.com/oil | sh $ oil create <ディレクトリ名> 参考: http://get.fuelphp.com/oil の中身 (抜粋) sudo sh -c "curl --silent http://get.fuelphp.com/installer.sh > ${PREFIX}oil” sudo chmod +x ${PREFIX}oil 参考: http://get.fuelphp.com/installer.sh の中身 (抜粋) git clone --recursive git://github.com/fuel/fuel.git "./$2" php "./$2/oil" refine install参考: http://docs.fuelphp.com/
  14. 14. ディレクトリ構成 (の一部)/├fuel/│├app/││├classes/│││├controller/ … Controller│││└model/ ……… Model││├config/ ………… 設定ファイル││└view/ …………… View│└core/│└public/ ……………… 公開ディレクトリ ├assets/ │└{css/, img/, js/} └index.php
  15. 15. config の切替 (開発環境、本番環境) fuel/app/config/ • development/ …… 開発環境の設定値 • production/ ………. 本番 〃 • config.php 他 …… 共通の設定値 - 深い方が優先 - デフォルトは development (via fuel/app/bootstrap.php) - production に切替: .htaccess SetEnv FUEL_ENV production参考: http://docs.fuelphp.com/general/environments.html
  16. 16. MVC
  17. 17. MVC モデル ソフトウェアを次の 3 つの構造に分割する手法 – Model • データの入出力 – View Controller • データの表示 – Controller View Model • Model と View の制御 HTM L • ユーザの入力に応答 File Database参考: http://docs.fuelphp.com/general/mvc.html
  18. 18. Controller • クラス名は Controller_Hoge • URL から呼び出せるメソッドは action_fuga() • ¥Fuel¥core¥ Controller クラスを継承 • fuel/app/classes/controller/ に配置 fuel/app/classes/controller/hoge.php class Controller_Hoge extends Controller { : public function action_fuga($arg1, $arg2 = NULL) { : return Response::forge(View::forge(welcome/index)); } }参考: http://docs.fuelphp.com/general/controllers/base.html
  19. 19. Controller URL との対応 http://example.jp/hoge/public/index.php/ hoge / fuga / piyo クラス メソッド 引数 fuel/app/classes/controller/hoge.php class Controller_Hoge extends Controller { : public function action_fuga($arg1, $arg2 = NULL) { : return Response::forge(View::forge(welcome/index)); } }参考: http://docs.fuelphp.com/general/controllers/base.html#/what_is_a_controller
  20. 20. Controller の返り値 Controller は必ず、次のいずれかを返す • Response オブジェクト • 文字列、文字列にキャスト可能なオブジェクト • e.g.) View fuel/app/classes/controller/hoge.php class Controller_Hoge extends Controller { : public function action_fuga($arg1, $arg2 = NULL) { : return Response::forge(View::forge(welcome/index)); } } return した内容が ブラウザに表示される参考: http://docs.fuelphp.com/general/controllers/base.html#/returning_results
  21. 21. “文字列にキャスト可能” ? “__toString()” メソッドを持つオブジェクト <?php class TestClass { public $foo; public function __construct($foo) { $this->foo = $foo; } public function __toString() { return $this->foo; } } $class = new TestClass(Hello); echo $class; // Hello参考: http://www.php.net/manual/ja/language.oop5.magic.php#object.tostring
  22. 22. Response オブジェクト ブラウザへの応答を制御 forge() で生成: Response::forge($body = null, $status = 200, $headers = array()) • $body: 本文 (string) • $status: HTTP ステータスコード • $headers: HTTP ヘッダ参考: http://docs.fuelphp.com/classes/response.html
  23. 23. Controller::before(), after() before() • コンストラクタのようなもの • action_*() の前に実行される • URL で指定された action_*() が存在しなくても 実行される after($response) • action_*() の後に実行される • URL で指定された action_*() が存在しないと 実行さない参考: http://docs.fuelphp.com/general/controllers/base.html#/special_methods
  24. 24. View • 基本は HTML • fuel/app/views/ に配置 • Controller から View::forge() で呼出し View::forge(ファイル名 [, View 変数]) e.g.) fuel/app/views/ hoge / fuga.php ↑ View::forge(hoge / fuga)参考: http://docs.fuelphp.com/general/views.html
  25. 25. View: 変数 Controller で値をセット • View::forge() の第2引数 $data = array(name => sho); return $view->forge(hoge, $data); • View::set() $view = View::forge(hoge); $view->set(name, sho); // or $view->name = sho return $view; View で出力 (※自動で HTML エスケープ) <?php echo $name; ?>参考: http://docs.fuelphp.com/general/views.html
  26. 26. View: src=“〜”, href=“〜” の path • Asset::css(), js(), img(), Html::anchor() <?php echo Asset::css(bootstrap.css); ?> ↓ <link type="text/css" rel="stylesheet" href="http://example.jp/fuel/public/assets/css/bootstrap.css?1341579 959" /> • Uri::base(false) index.php までの URL を返す <a href=“<?php echo Uri::base(false); ?>welcome/hello”>…参考: http://docs.fuelphp.com/classes/uri.html
  27. 27. Model • クラス名は Model_Hoge • ¥Fuel¥core¥ Model クラスを継承 • fuel/app/classes/model/ に配置 • Controller から new で生成 (ロード不要) $hoge = new Model_Hoge(); 基底クラスの定義: fuel/core/classes/model.php class Model {}参考: http://docs.fuelphp.com/general/models.html
  28. 28. Query Builder SQL クエリを生成 e.g.) $query = DB::select() ->from(members) ->where(member_id, >=, 2) ->order_by(member_id, asc); $result = $query->execute()->as_array(); ↓ SELECT * FROM `members` WHERE `member_id` >= 2 ORDER BY `member_id` ASC;参考: http://docs.fuelphp.com/classes/database/qb.html
  29. 29. Model_Crud DB の CRUD 操作を行うメソッドが予め実装 find_by_pk() 主キーを指定して一行取得 find_all() 全行取得 find() 条件に一致する行を全行取得 save() 保存 (update / insert) delete() 削除 :参考: http://docs.fuelphp.com/classes/model_crud/methods.html
  30. 30. Model_Crud: 使用例 members テーブル member_id int(), PK, AI name varchar(20) votes int() Model の定義 fuel/core/classes/model/member.php class Model_Member extends Model_Crud { protected static $_table_name = members; protected static $_primary_key = member_id; }参考: http://docs.fuelphp.com/classes/model_crud/introduction.html
  31. 31. Model_Crud: 使用例e.g.) データ挿入 fuel/core/classes/controller/akb.php $member = new Model_Member(); $member->name = 大島 優子; $member->votes = 108837; $member->save(); $member = new Model_Member(); // 新しい行 $member->name = 渡辺 麻友; $member->votes = 72574; $member->save(); member_id name votes 1 大島 優子 108,837 2 渡辺 麻友 72,574
  32. 32. Model_Crud: 使用例e.g.) データ更新 fuel/core/classes/controller/akb.php $member = Model_Member::find_by_pk(13); $member->votes += 100000; $member->save(); id name votes id name votes 1 大島 優子 108,837 1 大島 優子 108,837 2 渡辺 麻友 72,574 2 渡辺 麻友 72,574 : → : 13 北原 里英 26,531 13 北原 里英 126,531 : :
  33. 33. 便利な機能
  34. 34. 様々なライブラリValidation Class • ユーザ入力の正当性を検証 • @wakuworks さんのセッションに期待!Security Class • CSRF 対策などPagination Class • ページ送り etc.
  35. 35. Profiling 実行結果を分析して表示 fuel/app/config/config.php profiling => true,参考: http://docs.fuelphp.com/general/profiling.html
  36. 36. Controller_Rest クラス RESTful のサポート • Controller_Rest クラスを継承 • HTTP メソッドによって切替 • GET,POST,PUT,DELETE function <HTTP メソッド名>_<アクション名>() • 指定されたフォーマットで出力 • xml, json, csv, html, php, serialize http://〜/〜/<コントローラ名>.<フォーマット>参考: http://docs.fuelphp.com/general/controllers/rest.html
  37. 37. Controller_Rest クラス fuel/app/classes/controller/test.phpe.g.) class Controller_Test extends Controller_Rest { public function get_member($member_id) { $this->response(array( member_id => 13, name => 北原 里英, votes => 26531 )); } } ↓ http://example.jp/fuel/public/ test/member/13.json {"member_id":13,"name":"¥u5317¥u539f ¥u91cc¥u82f1","votes":26531}
  38. 38. 参考情報FuelPHP まとめ Wiki http://fuelphp.phpfogapp.com/wiki/参考書籍
  39. 39. 次回予告?だれかやってください! • oil • Orm¥Model • auth
  40. 40. おわり

×