はじめての FuelPHP

29,827 views

Published on

Published in: Technology
0 Comments
26 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
29,827
On SlideShare
0
From Embeds
0
Number of Embeds
15,811
Actions
Shares
0
Downloads
0
Comments
0
Likes
26
Embeds 0
No embeds

No notes for slide

はじめての 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. おわり

×