Click here to load reader
Upload
kenjis
View
16.924
Download
4
Embed Size (px)
DESCRIPTION
PHP 5.3用フレームワーク「FuelPHP」の紹介プレゼン資料
Citation preview
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が優先
ControllerURLとクラス名の対応
http://example.jp/time_message
➔class Controller_Time_Message
➔controller/time_message.php
➔クラス名の「_」はフォルダ区切りになるのでこれは使えない → 404
ControllerURLとクラス名の対応
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クラスを継承する
ORM1. config.phpでの設定
'always_load' => array('packages' => array(
'orm',//'auth',
),),
fuel/app/config/config.php
ORM2. 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でカラム名を定義する
ORM3. クエリの実行
// SQLクエリの実行$result = \Model\Post::find('all');
// 表示処理foreach ($result as $row){
echo $row['id'] . ' ';echo $row['title'] . ' ';echo $row['summary'] . '<br />';
}
echo 'レコード数: ' . count($result);
Coreクラス
どんなものがあるか?AgentArrAssetAutoloaderCacheCliConfigCookieCrypt
DatabaseDateDebugEventFieldsetFileFormFormatFtp
FuelHtmlImageInflectorInputLangLogMigrateModel_Crud
Mongo_DbNumPackagePaginationRedisRequestResponseSecuritySession
StrUploadUriValidationView
クラスの使い方
静的な呼び出し
<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 まとめ Wikihttp://fuelphp.phpfogapp.com/wiki/
FuelPHP Advent Calendar 2011http://atnd.org/events/22380
まとめ
FuelPHPは、シンプルでフレキシブルなコミュニティにより開発されているPHP5.3のフレームワークです。
公式ドキュメントの翻訳を手伝ってくれる人を募集しています。