SlideShare a Scribd company logo
10分でわかるFuelPHP
A simple, flexible, community driven
PHP 5.3 framework.
2013/06/22 @ OSC2013 Nagoya
kenjis
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リリース
 2011/12/13 1.1リリース
 2012/06/03 1.2リリース
 2012/09/09 1.3リリース
 2012/11/09 1.4リリース
 2013/01/20 1.5リリース
 2013/05/03 1.6リリース
 2013/06/09 1.6.1リリース (←今ここ)
FuelPHPとは?
 日本での4大PHPフレームワークの1つ
http://c4sa.nifty.com/
FuelPHPとは?
 日本での4大PHPフレームワークの1つ
http://www.paperboy.co.jp/news/201306121300
FuelPHPとは?
 はてなブックマーク数(3ユーザ以上)
➔CakePHP    4,926
➔Symfony    1,961
➔Zend Framework 829
➔FuelPHP      632
➔CodeIgniter    495
       (2013/6/21調べ)
FuelPHPの利用例
http://sp.demae-can.com/
FuelPHPの利用例
http://animita.tv/
FuelPHPの利用例
http://bushidotickets.com/
フレームワークとは?
 Webアプリケーションフレームワークとは?
➔Webアプリケーションを作成する「枠組み」
➔機能としては
• 過去のプログラミングの経験則の規約化
• 頻繁に使う機能を抽象化(モジュール化、
ライブラリ化)
➔Webアプリケーション全体を見通しよく
開発できるようにするもの
FuelPHPに向いている人
 CodeIgniterを知っている人
➔開発者がCodeIgniter系の人なので、かなり
似ている
 Kohanaを知っている人
➔Kohanaも参考に作られていますので、さらに
似ている(Kohana+α=FuelPHP)
 Configuration over Convention
➔規約が嫌いな人
➔CodeIgniter系のフレームワークなので、
強制的な規約は最小限になっている
FuelPHPに向いている人
 軽量高速なフレームワークが好きな人
 フレームワークをいろいろ拡張したい人
➔CodeIgniterのように拡張できます
 見やすいドキュメントが好きな人
➔CodeIgniterのユーザガイドのように
見やすいです(ただし、翻訳率は現在
64%程度)
 コマンドラインが好きな人(嫌いでも可)
FuelPHPに向いている人
 他のフレームワークに挫折した人
➔ドキュメントがわかりにくい
➔規約が多すぎて覚えきれない
➔デカすぎてソースが読めない
➔難しすぎる
FuelPHPを使うメリット
 高速な動作
➔軽量で動作が高速
 最新のPHPフレームワーク
➔PHP 5.3以降なので、5.3の機能をフルに
使える
 コードや仕様がクリーン
➔PHP 5.3でゼロから書かれたフレームワー
クなので、完全にOOPであり、クリーンな
コード
➔PHP4を引きずっていたりしない
FuelPHPを使うメリット
 バランス
➔CodeIgniterよりは広い範囲をカバー
している(多機能)
➔ビューのレイアウト機能、モデルの
CRUD機能、HMVC、認証インターフェ
イス、ORM、PHPUnitでのテストなど
 コマンドラインによるパワフルな機能
➔ScaffoldingやMigration
MVCモデルとは?
 Controller(コントローラ)は、
入力データに従って適切なデータを呼び出し
ModelやViewの連携など、アプリケーショ
ン全体の制御を行う
 Model(モデル)は、
データベースへのアクセスやデータの修正/
加工などのデータの管理を行う
 View(ビュー)は、
処理結果の表示など、画面表示を担当する
MVCモデル
Controller
流れの制御など
View
画面表示
Model
データの管理
・リクエスト
・データ入力
結果
結果
結果
呼び出し
呼び出し
FuelPHPのフォルダ構成
公式ドキュメント
アプリケーションを配置
FuelPHP本体
FuelPHPのパッケージ
oilコマンド
Web公開領域
フロントコントローラ
css、img、js
Composerのパッケージ
FuelPHPのフォルダ構成
アプリケーションを配置
コントローラを配置
モデルを配置
ビューモデルを配置
ビューを配置
クラスを配置
キャッシュフォルダ
ブートストラップ
設定ファイルを配置
言語ファイルを配置
ログフォルダ
DBマイグレーションファイルを配置
モジュール(HMVC)を配置
タスク(CLIから起動するクラス)を配置
tmpフォルダ
テスト(PHPUnit)を配置
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秒");
// テンプレートに変数を代入
return 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
Controller
URLとクラス名の対応
 http://example.jp/time_message ?
➔class Controller_Time_Message ?
➔controller/time_message.php ?
➔クラス名の「_」はフォルダ区切りにな
るのでこれは使えない
➔404 Not Found
 規約に外れるものはルーティング設定が
必要
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なコントローラ
➔Web APIがすぐに作成できる
➔Controller_Restクラスを継承する
 Hybrid Controller
➔Rest Controller + Template
➔Controller_Hybridクラスを継承する
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秒");
return View::forge('time_view', $data);
Controllerのコード
View
 (オプション)Parserモジュール
 以下のテンプレートを標準でサポート
➔Smarty / Twig / Dwoo / PHPTAL /
Mustache / Jade / Haml /
Markdown
 packages/parser/README.md参照
Model
 オプション(使わないことも可能)
 ただのPHPのクラス
 データベース・アクセスの方法
➔DB::query()
➔Query Builder
➔Model_Crud
➔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);
Model
class Model_Post extends Model
{
function find_all()
{
...
}
}
 Modelクラスを継承
fuel/app/classes/model/post.php
Modelの使い方
 メソッドを呼び出す
$data['posts'] = Model_Post::find_all();
class Model_Post extends Model
{
function find_all()
{
...
}
}
Modelのコード
Model
拡張したクラス
 Model_Crudクラス
➔CRUD用メソッドを追加したもの
➔Model_Crudクラスを継承する
ORMの使い方
1. config.phpでの設定
2. Modelの作成
3. クエリの実行
ORMの使い方
1. config.phpでの設定
'always_load'  => array(
'packages'  => array(
'orm',
//'auth',
),
),
fuel/app/config/config.php
ORMの使い方
2. Modelの作成
<?php
class Model_Post extends OrmModel
{
protected static $_properties = array(
'id', 'title', 'summary', 'body', 
'created_at', 'updated_at',
);
protected static $_observers = array(
'OrmObserver_CreatedAt' => 
array('events'=>array('before_insert')),
'OrmObserver_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);
ORM Model
拡張したクラス
 OrmModel_Soft
➔論理削除
 OrmModel_Temporal
➔データのバージョン管理
 OrmModel_Nestedset
➔階層構造のデータ
 その他
➔ORM ModelでEAV(Entity-
Attribute-Value)モデルを扱う機能
Coreクラス
 どんなものがあるか?
Agent
Arr
Asset
Autoloader
Cache
Cli
Config
Cookie
Crypt
Database
Date
Debug
Event
Fieldset
File
Finder
Form
Format
Ftp
Fuel
Html
Image
Inflector
Input
Lang
Log
Markdown
Migrate
Model_Crud
Module
Mongo_Db
Num
Package
Pagination
Profiler
Redis
Request
Response
Router
Security
Session
Str
Theme
Upload
Uri
Validation
View
クラスの使い方
 静的な呼び出し
<form action="http://localhost/blog/uri/to/form" 
accept­charset="utf­8" 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://fuelphp.jp/
 翻訳を手伝ってくれる人を募集中
FuelPHPについての日本語情報
 FuelPHP まとめ Wiki
http://wiki.fuelphp1st.com/wiki/
FuelPHPについての
日本語コミュニティ
 fuelphp.jp Googleグループ
https://groups.google.com/group/fuelphp_jp?hl=ja
 twitter 「fuelphp」で検索
https://twitter.com/search/realtime?q=fuelphp&src=typd
 facebook FuelPHP日本語ニュース
https://www.facebook.com/jp.fuel
FuelPHPについての書籍
 『FuelPHP Advent Calendar 2011』技術評論社
 『FuelPHP入門』ソーテック社
 『はじめてのフレームワークとしてのFuelPHP』
達人出版会
 『FuelPHP Advent Calendar 2012』達人出版会
FuelPHPについての書籍
無料 無料
まとめ
 FuelPHPは、シンプルでフレキシブルな
コミュニティにより開発されているPHP
5.3のフレームワークです。
 日本のユーザも増え、採用事例も増えて
きました。
 公式ドキュメントの翻訳を手伝ってくれ
る人を募集しています。
このファイルのライセンス
 This work is licensed under the
Creative Commons 表示 - 継承 3.0 非
移植 License. To view a copy of this
license, visit
http://creativecommons.org/licen
ses/by-sa/3.0/.

More Related Content

KEY
最近、僕がハマったFuelPHPの紹介
PDF
FuelPHPでのファイルアップロード
PPTX
今、最も勢いのあるWebフレームワーク「fuel php」
PPTX
Fuelphp1.8を始めたい
PDF
Osc2014
PDF
NetBeansではじめる FuelPHP
PDF
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
PDF
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1
最近、僕がハマったFuelPHPの紹介
FuelPHPでのファイルアップロード
今、最も勢いのあるWebフレームワーク「fuel php」
Fuelphp1.8を始めたい
Osc2014
NetBeansではじめる FuelPHP
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

What's hot (20)

PDF
フレームワーク入門書の決定版が完成
PPTX
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
PPT
PHP buildpackでhackとphalconが動いた件について
PDF
あにみた!(PHPカンファレンス用資料)
PDF
はじめての FuelPHP
PDF
FuelPHP活用事例
PDF
10分でわかるFuelPHP @ 2011/12
PDF
FuelPHP Osu Nagoya vol.1
KEY
FuelPHPをさわってみて
PDF
Let’s translate FuelPHP docs!
PDF
FuelPHPで3種のprofilerを使ってみた
PDF
実"戦"CakePHP Plugin
PDF
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
PDF
Fuel php osc tokyo2012
PPT
Cakephp勉強会@tokyo #4
PDF
第21回Creators MeetUp
PPTX
App Engine と いまどきのPHP
PPT
Cakephp tokyo5
PDF
スクリプト言語PHP攻略法
PPTX
PHP x AWS でスケーラブルなシステムをつくろう
フレームワーク入門書の決定版が完成
FuelPHP - フレームワーク4本勝負 @PHPカンファレンス関西2014
PHP buildpackでhackとphalconが動いた件について
あにみた!(PHPカンファレンス用資料)
はじめての FuelPHP
FuelPHP活用事例
10分でわかるFuelPHP @ 2011/12
FuelPHP Osu Nagoya vol.1
FuelPHPをさわってみて
Let’s translate FuelPHP docs!
FuelPHPで3種のprofilerを使ってみた
実"戦"CakePHP Plugin
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
Fuel php osc tokyo2012
Cakephp勉強会@tokyo #4
第21回Creators MeetUp
App Engine と いまどきのPHP
Cakephp tokyo5
スクリプト言語PHP攻略法
PHP x AWS でスケーラブルなシステムをつくろう
Ad

Viewers also liked (16)

PDF
極める routes.php
PDF
Essence of Retail e-Commerce and its Optimization Webinar
PDF
HMI/UI Development Services - Bangalore, India
PDF
First time telescope buying
PDF
JUMBO Loans
PPS
Social Media Calendar 2011
PPTX
Keynote Talk - Is agile struggling in India
PDF
Linkedin presentation-red-1225231144081339-8
PDF
บุหรี่
PDF
Online Retailing Using Facebook Webinar
DOCX
Microsoft Project workshop in Pune 6th & 7th August
PDF
Vesten forstår ikke rusland
PDF
de Flank &amp; de Spits Haarlem
PPTX
How To attract People To Your Brand’s Story
PPTX
Nida presentation
PPT
Cross-Lingual Web API Classification
極める routes.php
Essence of Retail e-Commerce and its Optimization Webinar
HMI/UI Development Services - Bangalore, India
First time telescope buying
JUMBO Loans
Social Media Calendar 2011
Keynote Talk - Is agile struggling in India
Linkedin presentation-red-1225231144081339-8
บุหรี่
Online Retailing Using Facebook Webinar
Microsoft Project workshop in Pune 6th & 7th August
Vesten forstår ikke rusland
de Flank &amp; de Spits Haarlem
How To attract People To Your Brand’s Story
Nida presentation
Cross-Lingual Web API Classification
Ad

Similar to 10分でわかるFuelPHP @ OSC2013 Nagoya (20)

PDF
20130630fuelphptokyo4
PDF
FuelPHP BoF ライブコーディング編 @ OSC2013 Nagoya
PDF
Chrome Devtools for beginners (v1.1)
PPTX
Polyphony 新機能ツアー
PDF
OSC 2014 Tokyo fall plone_terada
PPTX
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
PDF
Composerはじめました
PDF
LibreOfficeの最新動向 in KOF2015
PDF
CakePHP3ウォークスルー
PDF
PHPの今とこれから2015
PDF
2019 0704 about ConoHa VM migration from C1 to C2
PPTX
初めてのHtml5 20120612
PDF
PyCon JP 2014 plone terada
PDF
Alfresco study29 activitymonitoring
PDF
PHPの拡張モジュールをGoで作る
PDF
先取り Go1.5
PPTX
FuelPHP × HHVM サービス開発事例
PDF
HTML5の話
PDF
2019年 これからの人向け 超速習!流体解析ツールボックスOpenFOAM
PDF
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い
20130630fuelphptokyo4
FuelPHP BoF ライブコーディング編 @ OSC2013 Nagoya
Chrome Devtools for beginners (v1.1)
Polyphony 新機能ツアー
OSC 2014 Tokyo fall plone_terada
まだ技術ブログを始めてないPHPerのあなたへ。PHPカンファレンス関西2013 LT
Composerはじめました
LibreOfficeの最新動向 in KOF2015
CakePHP3ウォークスルー
PHPの今とこれから2015
2019 0704 about ConoHa VM migration from C1 to C2
初めてのHtml5 20120612
PyCon JP 2014 plone terada
Alfresco study29 activitymonitoring
PHPの拡張モジュールをGoで作る
先取り Go1.5
FuelPHP × HHVM サービス開発事例
HTML5の話
2019年 これからの人向け 超速習!流体解析ツールボックスOpenFOAM
なぜ、PHPのmbstring.func_overloadをdeprecatedにするのに5年かかったのか? - 慢心、環境の違い

More from kenjis (12)

PDF
AspectMock 最強のモッキングフレームワーク
PDF
『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント
PDF
はじめてのMercurial/Bitbucket その2
PDF
達人出版会からPHPの本を出版しよう
PDF
CodeIgniter 最新情報 2011 (増補版)
PDF
CodeIgniterユーザガイドの翻訳に参加しよう!
PDF
はじめてのMercurial/Bitbucket
PDF
CodeIgniter 最新情報 2010
PDF
『PHP逆引きレシピ』とセキュリティのこと
PDF
CodeIgniter 貴方はどのフレームワークを使うべきか?
PDF
CodeIgniterによるPhwittr
PDF
CodeIgniter 〜 2008年大躍進のPHPフレームワーク
AspectMock 最強のモッキングフレームワーク
『はじめてのフレームワークとしてのFuelPHP 改訂版(第2版)』のポイント
はじめてのMercurial/Bitbucket その2
達人出版会からPHPの本を出版しよう
CodeIgniter 最新情報 2011 (増補版)
CodeIgniterユーザガイドの翻訳に参加しよう!
はじめてのMercurial/Bitbucket
CodeIgniter 最新情報 2010
『PHP逆引きレシピ』とセキュリティのこと
CodeIgniter 貴方はどのフレームワークを使うべきか?
CodeIgniterによるPhwittr
CodeIgniter 〜 2008年大躍進のPHPフレームワーク

10分でわかるFuelPHP @ OSC2013 Nagoya