More Related Content Similar to はじめての FuelPHP (20) はじめての FuelPHP1. はじめての FuelPHP
Jul. 8, 2012
FuelPHP 勉強会 東京
sho <sho@codeigniter.jp>
6. FuelPHP とは
オープンソースの PHP (>=5.3) フレームワーク
MIT License (*1)
• 無償で無制限に扱って良い
(ソースコードの公開義務なし)
• 著作権表示、許諾表示をソフトウェアのすべての複製
または重要な部分に記載しなければならない
• 作者はソフトウェアに関してなんら責任を負わない
2011年 7月に登場
CodeIgniter ライク
*1 参考: http://ja.wikipedia.org/wiki/MIT_License
7. 特徴
AN (H)MVC FRAMEWORK
• MVC モデルに準拠
MODULAR AND EXTENDABLE TO A FAULT
• 気に入らない部分は拡張可能
参考: http://fuelphp.com/features
8. 特徴
SECURITY
• XSS、CSRF、SQL インジェクションの対策 etc.
OIL: THE POWER OF THE COMMAND LINE
• 強力なコマンドライン (使わなくても良い)
• コードの生成、DB マイグレーション、
デバッグ etc.
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. 特徴
AUTHENTIFICATION FRAMEWORK
• 認証機能を簡単に実装可能
USE ANY TEMPLATE PARSER FOR YOUR VIEWS
• 様々なテンプレートパーサに対応
• mustache, Markdown, Smarty, Twig, Haml,
Jade, Dwoo, PHPTAL
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
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/
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
17. MVC モデル
ソフトウェアを次の 3 つの構造に分割する手法
– Model
• データの入出力
– View Controller
• データの表示
– Controller View Model
• Model と View の制御 HTM
L
• ユーザの入力に応答 File
Database
参考: http://docs.fuelphp.com/general/mvc.html
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. 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. 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. “文字列にキャスト可能” ?
“__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. Response オブジェクト
ブラウザへの応答を制御
forge() で生成:
Response::forge($body = null, $status = 200, $headers = array())
• $body: 本文 (string)
• $status: HTTP ステータスコード
• $headers: HTTP ヘッダ
参考: http://docs.fuelphp.com/classes/response.html
23. Controller::before(), after()
before()
• コンストラクタのようなもの
• action_*() の前に実行される
• URL で指定された action_*() が存在しなくても
実行される
after($response)
• action_*() の後に実行される
• URL で指定された action_*() が存在しないと
実行さない
参考: http://docs.fuelphp.com/general/controllers/base.html#/special_methods
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. 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. 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. 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. 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. Model_Crud
DB の CRUD 操作を行うメソッドが予め実装
find_by_pk() 主キーを指定して一行取得
find_all() 全行取得
find() 条件に一致する行を全行取得
save() 保存 (update / insert)
delete() 削除
:
参考: http://docs.fuelphp.com/classes/model_crud/methods.html
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. 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. 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
: :
34. 様々なライブラリ
Validation Class
• ユーザ入力の正当性を検証
• @wakuworks さんのセッションに期待!
Security Class
• CSRF 対策など
Pagination Class
• ページ送り
etc.
35. Profiling
実行結果を分析して表示
fuel/app/config/config.php
'profiling' => true,
参考: http://docs.fuelphp.com/general/profiling.html
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. Controller_Rest クラス
fuel/app/classes/controller/test.php
e.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}