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.4k
はじめてのMercurial/Bitbucket その2
kenjis
1
130
はじめてのMercurial/Bitbucket
kenjis
1
190
Other Decks in Programming
See All in Programming
Remix on Hono on Cloudflare Workers
yusukebe
1
280
LLM生成文章の精度評価自動化とプロンプトチューニングの効率化について
layerx
PRO
2
190
弊社の「意識チョット低いアーキテクチャ」10選
texmeijin
5
24k
Duckdb-Wasmでローカルダッシュボードを作ってみた
nkforwork
0
120
「今のプロジェクトいろいろ大変なんですよ、app/services とかもあって……」/After Kaigi on Rails 2024 LT Night
junk0612
5
2.1k
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
330
Jakarta EE meets AI
ivargrimstad
0
600
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
580
WebフロントエンドにおけるGraphQL(あるいはバックエンドのAPI)との向き合い方 / #241106_plk_frontend
izumin5210
4
1.4k
ローコードSaaSのUXを向上させるためのTypeScript
taro28
1
610
最新TCAキャッチアップ
0si43
0
140
C++でシェーダを書く
fadis
6
4.1k
Featured
See All Featured
Mobile First: as difficult as doing things right
swwweet
222
8.9k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
229
52k
Code Reviewing Like a Champion
maltzj
520
39k
個人開発の失敗を避けるイケてる考え方 / tips for indie hackers
panda_program
93
16k
How to train your dragon (web standard)
notwaldorf
88
5.7k
How To Stay Up To Date on Web Technology
chriscoyier
788
250k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Principles of Awesome APIs and How to Build Them.
keavy
126
17k
Visualization
eitanlees
145
15k
Art, The Web, and Tiny UX
lynnandtonic
297
20k
What's new in Ruby 2.0
geeforr
343
31k
It's Worth the Effort
3n
183
27k
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のフレー ムワークです。 公式ドキュメントの翻訳を手伝ってくれる人を 募集しています。