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
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
Julia という言語について (FP in Julia « SIDE: F ») for 関数型まつり2025
antimon2
3
970
既存デザインを変更せずにタップ領域を広げる方法
tahia910
1
240
都市をデータで見るってこういうこと PLATEAU属性情報入門
nokonoko1203
1
550
Railsアプリケーションと パフォーマンスチューニング ー 秒間5万リクエストの モバイルオーダーシステムを支える事例 ー Rubyセミナー 大阪
falcon8823
3
690
Gleamという選択肢
comamoca
6
740
deno-redisの紹介とJSRパッケージの運用について (toranoana.deno #21)
uki00a
0
130
実践ArchUnit ~実例による検証パターンの紹介~
ogiwarat
2
280
WindowInsetsだってテストしたい
ryunen344
1
190
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
41
28k
Webの外へ飛び出せ NativePHPが切り拓くPHPの未来
takuyakatsusa
2
180
「ElixirでIoT!!」のこれまでとこれから
takasehideki
0
370
C++20 射影変換
faithandbrave
0
500
Featured
See All Featured
Designing Experiences People Love
moore
142
24k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
7
700
Distributed Sagas: A Protocol for Coordinating Microservices
caitiem20
331
22k
Gamification - CAS2011
davidbonilla
81
5.3k
実際に使うSQLの書き方 徹底解説 / pgcon21j-tutorial
soudai
PRO
181
53k
How STYLIGHT went responsive
nonsquared
100
5.6k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
233
17k
[Rails World 2023 - Day 1 Closing Keynote] - The Magic of Rails
eileencodes
35
2.3k
How to Think Like a Performance Engineer
csswizardry
24
1.7k
Why Our Code Smells
bkeepers
PRO
337
57k
Bootstrapping a Software Product
garrettdimon
PRO
307
110k
Reflections from 52 weeks, 52 projects
jeffersonlam
351
20k
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のフレー ムワークです。 公式ドキュメントの翻訳を手伝ってくれる人を 募集しています。