Upgrade to PRO for Only $50/Year—Limited-Time Offer! 🔥
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
10分でわかるFuelPHP
Search
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
190
Other Decks in Programming
See All in Programming
チーム開発の “地ならし"
konifar
8
6.6k
20251127_ぼっちのための懇親会対策会議
kokamoto01_metaps
2
340
アーキテクチャと考える迷子にならない開発者テスト
irof
9
3.4k
レイトレZ世代に捧ぐ、今からレイトレを始めるための小径
ichi_raven
0
480
非同期処理の迷宮を抜ける: 初学者がつまづく構造的な原因
pd1xx
1
360
AI時代もSEOを頑張っている話
shirahama_x
0
200
配送計画の均等化機能を提供する取り組みについて(⽩⾦鉱業 Meetup Vol.21@六本⽊(数理最適化編))
izu_nori
0
110
Atomics APIを知る / Understanding Atomics API
ssssota
1
230
手軽に積ん読を増やすには?/読みたい本と付き合うには?
o0h
PRO
1
130
最新のDirectX12で使えるレイトレ周りの機能追加について
projectasura
0
330
JJUG CCC 2025 Fall: Virtual Thread Deep Dive
ternbusty
3
500
AIエージェントでのJava開発がはかどるMCPをAIを使って開発してみた / java mcp for jjug
kishida
4
830
Featured
See All Featured
Building Applications with DynamoDB
mza
96
6.8k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
Optimizing for Happiness
mojombo
379
70k
The Cost Of JavaScript in 2023
addyosmani
55
9.3k
Building Flexible Design Systems
yeseniaperezcruz
329
39k
The Invisible Side of Design
smashingmag
302
51k
Testing 201, or: Great Expectations
jmmastey
46
7.8k
How to Ace a Technical Interview
jacobian
280
24k
Optimising Largest Contentful Paint
csswizardry
37
3.5k
GraphQLの誤解/rethinking-graphql
sonatard
73
11k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
9.8k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
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のフレー ムワークです。 公式ドキュメントの翻訳を手伝ってくれる人を 募集しています。