Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
10分でわかるFuelPHP
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
kenjis
December 25, 2011
Programming
2
3k
10分でわかるFuelPHP
PHP 5.3用フレームワーク「FuelPHP」の紹介プレゼン資料
kenjis
December 25, 2011
Tweet
Share
More Decks by kenjis
See All by kenjis
10分でわかるFuelPHP @OSC2012 Nagoya
kenjis
3
4.5k
はじめてのMercurial/Bitbucket その2
kenjis
1
140
はじめてのMercurial/Bitbucket
kenjis
1
200
Other Decks in Programming
See All in Programming
Cyrius ーLinux非依存にコンテナをネイティブ実行する専用OSー
n4mlz
0
260
AIと共にエンジニアとPMの “二刀流”を実現する
naruogram
0
100
ロボットのための工場に灯りは要らない
watany
12
3.2k
2026-03-27 #terminalnight 変数展開とコマンド展開でターミナル作業をスマートにする方法
masasuzu
0
250
What Spring Developers Should Know About Jakarta EE
ivargrimstad
0
770
おれのAgentic Coding 2026/03
tsukasagr
1
120
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
310
Codex CLIのSubagentsによる並列API実装 / Parallel API Implementation with Codex CLI Subagents
takatty
2
700
Symfonyの特性(設計思想)を手軽に活かす特性(trait)
ickx
0
100
PHP 7.4でもOpenTelemetryゼロコード計装がしたい! / PHPerKaigi 2026
arthur1
1
440
実践ハーネスエンジニアリング #MOSHTech
kajitack
7
4.9k
「効かない!」依存性注入(DI)を活用したAPI Platformのエラーハンドリング奮闘記
mkmk884
0
280
Featured
See All Featured
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
140
Build your cross-platform service in a week with App Engine
jlugia
234
18k
Designing for humans not robots
tammielis
254
26k
Believing is Seeing
oripsolob
1
99
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
170
Paper Plane
katiecoart
PRO
0
48k
The browser strikes back
jonoalderson
0
850
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
199
73k
Accessibility Awareness
sabderemane
0
87
Designing for Performance
lara
611
70k
How to Talk to Developers About Accessibility
jct
2
160
From π to Pie charts
rasagy
0
160
Transcript
10分でわかるFuelPHP A simple, flexible, community driven PHP5.3 framework. 2011/12/25 Kenji
Suzuki
FuelPHPとは? コミュニティで開発されている オープンソースのPHPフレームワーク 2011/7/30、初の公式リリース1.0.0 公式サイト http://fuelphp.com/
FuelPHPとは? MITライセンス PHP 5.3以降 いろいろなフレームワークのいいとこ取り ➔CodeIgniter ➔Kohana
➔Symfony ➔Rails
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公式リリース(←今ここ)
FuelPHPとは? 世界第x位のPHPフレームワーク Googleトレンドによる検索数
FuelPHPとは? 世界第x位のPHPフレームワーク Googleトレンドによる検索数 このへん
FuelPHPの利用例 http:// Under Construction
フレームワークとは? Webアプリケーションフレームワークとは? ➔Webアプリケーションを作成する 「枠組み」 ➔機能としては • 過去のプログラミングの経験則の 規約化する •
頻繁に使う機能を抽象化する (モジュール化、ライブラリ化) ➔Webアプリケーション全体を 見通しよく開発できるようにするもの
FuelPHPに向いている人 CodeIgniterを知っている人 ➔ 開発者がCodeIgniter系の人なので、 かなり似てます Kohanaを知っている人 ➔ Kohanaも参考に作られていますので、
さらに似てます(Kohana+α=FuelPHP) Configuration over Convention ➔ 規約が嫌いな人 ➔ CodeIgniter系のフレームワークですので、強制 的な規約は最小限になっています
FuelPHPに向いている人 軽量・高速のフレームワークが好きな人 フレームワークをいろいろ拡張したい人 ➔ CodeIgniterのように拡張できます 見やすいドキュメントが好きな人 ➔
CodeIgniterのユーザガイドのように 見やすいです ➔ (ただし英語、しかも完全なドキュメントではあり ません) コマンドラインが好きな人(嫌いでも可)
FuelPHPに向いている人 他のフレームワークに挫折した人 ➔規約が多すぎて覚えきれない ➔デカすぎてソース読めないから嫌 ➔ただし、OOPになれてないと難しいかも ➔ぶっちゃけ、クラスって何?という人は無理
FuelPHPを使うメリット 高速な動作 ➔軽量で動作が高速 最新のPHPフレームワーク ➔PHP5.3以降なので、5.3の機能をフルに使 える コードや仕様がクリーン
➔PHP5.3でゼロから書かれたフレームワーク なので、完全にOOPであり、クリーンなコー ド ➔PHP4を引きずっていたりしない
FuelPHPを使うメリット バランス ➔CodeIgniterよりは広い範囲をカバーして いる ➔ビューのレイアウト機能、モデルのCRUD機 能、認証ライブラリ、ORMなど コマンドラインによるパワフルな機能 ➔ScaffoldingやMigration
MVCモデルとは? Controller(コントローラ)は、 入力データに従って適切なデータを呼び出し ModelやViewの連携など、アプリケーション 全体の制御を行う Model(モデル)は、 データベースへのアクセスやデータの修正/ 加工などのデータの管理を行う
View(ビュー)は、 処理結果の表示など、画面表示を担当する
MVCモデル Controller 流れの制御など View 画面表示 Model データの管理 ・リクエスト ・データ入力 結果
結果 結果 呼び出し 呼び出し
FuelPHPのフォルダ構成 公式ドキュメント アプリケーションを配置 FuelPHP本体 FuelPHPのパッケージ oilコマンド Web公開領域 フロントコントローラ
FuelPHPのフォルダ構成 アプリケーションを配置 コントローラを配置 モデルを配置 ビューモデルを配置 ビューを配置 クラスを配置 キャッシュフォルダ ブートストラップ 設定ファイルを配置
言語ファイルを配置 ログフォルダ マイグレーションファイルを配置 モジュールを配置 タスクを配置 サードパーティライブラリを配置 tmpフォルダ
FuelPHPのURLの構造 URLの構造 http://example.jp/コントローラ/メソッド/引数 class Controller_Shop extends Controller { ...
function action_search($id) { ... } } http://example.jp/shop/search/123
Controller Controllerクラスを継承 クラス名には先頭に「Controller_」を付ける 「Controller_」の後の単語の先頭は大文字 アクションメソッド名には先頭に「action_」を 付ける
ファイル名やフォルダ名はすべて小文字 (FuelPHPでの共通の規約) クラス名の中の「_」はフォルダ区切りを意味 する
Controller class Controller_Time extends Controller { public function action_index() {
// タイトル $data['title'] = '時刻メッセージ'; // 現在の時刻 $data['now_time'] = date("H時i分s秒"); // テンプレートに変数を代入 $this>response>body = View::forge( 'time_view', $data ); } } fuel/app/classes/controller/time.php action_index()メソッドはデフォルトメソッド ➔http://example.jp/time/
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が優先
Controller URLとクラス名の対応 http://example.jp/time_message ➔class Controller_Time_Message ➔controller/time_message.php ➔クラス名の「_」はフォルダ区切りになるので これは使えない →
404
Controller URLとクラス名の対応 http://example.jp/time/time_message ➔class Controller_Time ➔controller/time.php ➔function action_time_message() ➔メソッド名の「_」はOK
Controller 拡張したクラス Template Controller ➔ビューのレイアウト機能を追加したもの ➔Controller_Templateクラスを継承する Rest Controller
➔RESTfulなコントローラ ➔Controller_Restクラスを継承する
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秒"); $this>response>body = View::forge( 'time_view', $data); Controllerのコード
View (オプション)Parserモジュール 以下のテンプレートを標準でサポート ➔ SimpleTags ➔ Mustache ➔
Twig ➔ Jade ➔ Haml ➔ Smarty packages/parser/README.md参照
Model オプション(使わないことも可能) ただのPHPのクラス データベース・アクセスの方法 1. DB::query() 2.
Query Builder 3. ORMパッケージ
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);
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);
ORM 1. config.phpでの設定 2. Modelの作成 3. クエリの実行
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() { ... } } または
Modelの使い方 その1 メソッドを呼び出す $data['posts'] = Model_Post::find_all(); class Model_Post extends
Model { function find_all() { ... } } Modelのコード
Modelの使い方 その2 メソッドを呼び出す $data['posts'] = \Model\Post::find_all(); namespace Model; class
Post extends \Model { function find_all() { ... } } Modelのコード
Model 拡張したクラス Model_Crudクラス ➔CRUD機能を追加したもの ➔Model_Crudクラスを継承する
ORM 1. config.phpでの設定 'always_load' => array( 'packages' => array( 'orm',
//'auth', ), ), fuel/app/config/config.php
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でカラム名を定義する
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);
Coreクラス どんなものがあるか? Agent Arr Asset Autoloader Cache Cli Config
Cookie Crypt Database Date Debug Event Fieldset File Form Format Ftp Fuel Html Image Inflector Input Lang Log Migrate Model_Crud Mongo_Db Num Package Pagination Redis Request Response Security Session Str Upload Uri Validation View
クラスの使い方 静的な呼び出し <form action="http://localhost/blog/uri/to/form" acceptcharset="utf8" method="post"> echo Form::open('uri/to/form'); 出力されるHTML
クラスの使い方 インスタンス化 $val = Validation::forge(); $val>add('title', 'Title') >add_rule('required'); if
($val>run()) { ... } else { ... }
FuelPHPのセキュリティ フールプルーフではない! ➔フールプルーフとは? 「よくわかっていない人が扱っても安全」 -- http://e-words.jp/ ➔◦◦を使っていれば安全 ただし、FuelPHPには、
➔デフォルトのセキュリティ機能 ➔手動で利用するセキュリティ機能 • フレームワークを使わない場合より、 かなり安全
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では自動エスケープ
FuelPHPのセキュリティ セキュリティ機能 ➔ Input filtering • config.phpのsecurity.input_filter ➔ CSRF保護
• 自動ではないが支援機能あり ➔ XSS filtering • HTMLawedというライブラリが付属している
FuelPHPの高い拡張性 Coreクラス ➔継承・置き換え可能 • コアクラスを置き換えずに拡張する • コアクラスを拡張し、置き換える • パッケージからコアを拡張する
公式ドキュメントの翻訳 https://github.com/NEKOGET/FuelPHP_docs_jp http://press.nekoget.com/fuelphp_doc/ 翻訳を手伝ってくれる人を募集中
FuelPHPについての日本語情報 FuelPHP まとめ Wiki http://fuelphp.phpfogapp.com/wiki/ FuelPHP Advent Calendar
2011 http://atnd.org/events/22380
まとめ FuelPHPは、シンプルでフレキシブルなコミュ ニティにより開発されているPHP5.3のフレー ムワークです。 公式ドキュメントの翻訳を手伝ってくれる人を 募集しています。