47

Click here to load reader

10分でわかるFuelPHP @ 2011/12

  • Upload
    kenjis

  • View
    16.924

  • Download
    4

Embed Size (px)

DESCRIPTION

PHP 5.3用フレームワーク「FuelPHP」の紹介プレゼン資料

Citation preview

Page 1: 10分でわかるFuelPHP @ 2011/12

10分でわかるFuelPHP

A simple, flexible, community driven PHP5.3 framework.

2011/12/25

Kenji Suzuki

Page 2: 10分でわかるFuelPHP @ 2011/12

FuelPHPとは?

コミュニティで開発されているオープンソースのPHPフレームワーク

2011/7/30、初の公式リリース1.0.0

公式サイト http://fuelphp.com/

Page 3: 10分でわかるFuelPHP @ 2011/12

FuelPHPとは?

MITライセンス

PHP 5.3以降

いろいろなフレームワークのいいとこ取り

➔CodeIgniter

➔Kohana

➔Symfony

➔Rails

Page 4: 10分でわかるFuelPHP @ 2011/12

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公式リリース(←今ここ)

Page 5: 10分でわかるFuelPHP @ 2011/12

FuelPHPとは?

世界第x位のPHPフレームワーク

Googleトレンドによる検索数

Page 6: 10分でわかるFuelPHP @ 2011/12

FuelPHPとは?

世界第x位のPHPフレームワーク

Googleトレンドによる検索数

このへん

Page 7: 10分でわかるFuelPHP @ 2011/12

FuelPHPの利用例

http://

Under Construction

Page 8: 10分でわかるFuelPHP @ 2011/12

フレームワークとは?

Webアプリケーションフレームワークとは?

➔Webアプリケーションを作成する「枠組み」

➔機能としては

• 過去のプログラミングの経験則の規約化する

• 頻繁に使う機能を抽象化する(モジュール化、ライブラリ化)

➔Webアプリケーション全体を見通しよく開発できるようにするもの

Page 9: 10分でわかるFuelPHP @ 2011/12

FuelPHPに向いている人

CodeIgniterを知っている人

➔ 開発者がCodeIgniter系の人なので、かなり似てます

Kohanaを知っている人

➔ Kohanaも参考に作られていますので、さらに似てます(Kohana+α=FuelPHP)

Configuration over Convention

➔ 規約が嫌いな人

➔ CodeIgniter系のフレームワークですので、強制的な規約は最小限になっています

Page 10: 10分でわかるFuelPHP @ 2011/12

FuelPHPに向いている人

軽量・高速のフレームワークが好きな人

フレームワークをいろいろ拡張したい人

➔ CodeIgniterのように拡張できます

見やすいドキュメントが好きな人

➔ CodeIgniterのユーザガイドのように見やすいです

➔ (ただし英語、しかも完全なドキュメントではありません)

コマンドラインが好きな人(嫌いでも可)

Page 11: 10分でわかるFuelPHP @ 2011/12

FuelPHPに向いている人

他のフレームワークに挫折した人

➔規約が多すぎて覚えきれない

➔デカすぎてソース読めないから嫌

➔ただし、OOPになれてないと難しいかも

➔ぶっちゃけ、クラスって何?という人は無理

Page 12: 10分でわかるFuelPHP @ 2011/12

FuelPHPを使うメリット

高速な動作

➔軽量で動作が高速

最新のPHPフレームワーク

➔PHP5.3以降なので、5.3の機能をフルに使える

コードや仕様がクリーン

➔PHP5.3でゼロから書かれたフレームワークなので、完全にOOPであり、クリーンなコード

➔PHP4を引きずっていたりしない

Page 13: 10分でわかるFuelPHP @ 2011/12

FuelPHPを使うメリット

バランス

➔CodeIgniterよりは広い範囲をカバーしている

➔ビューのレイアウト機能、モデルのCRUD機能、認証ライブラリ、ORMなど

コマンドラインによるパワフルな機能

➔ScaffoldingやMigration

Page 14: 10分でわかるFuelPHP @ 2011/12

MVCモデルとは?

Controller(コントローラ)は、入力データに従って適切なデータを呼び出しModelやViewの連携など、アプリケーション全体の制御を行う

Model(モデル)は、データベースへのアクセスやデータの修正/加工などのデータの管理を行う

View(ビュー)は、処理結果の表示など、画面表示を担当する

Page 15: 10分でわかるFuelPHP @ 2011/12

MVCモデル

Controller流れの制御など

View画面表示

Modelデータの管理

・リクエスト・データ入力

結果

結果

結果

呼び出し

呼び出し

Page 16: 10分でわかるFuelPHP @ 2011/12

FuelPHPのフォルダ構成

公式ドキュメント

アプリケーションを配置

FuelPHP本体

FuelPHPのパッケージ

oilコマンド

Web公開領域

フロントコントローラ

Page 17: 10分でわかるFuelPHP @ 2011/12

FuelPHPのフォルダ構成

アプリケーションを配置

コントローラを配置

モデルを配置

ビューモデルを配置

ビューを配置

クラスを配置

キャッシュフォルダ

ブートストラップ

設定ファイルを配置

言語ファイルを配置

ログフォルダ

マイグレーションファイルを配置

モジュールを配置

タスクを配置

サードパーティライブラリを配置

tmpフォルダ

Page 18: 10分でわかるFuelPHP @ 2011/12

FuelPHPのURLの構造

URLの構造http://example.jp/コントローラ/メソッド/引数

class Controller_Shop extends Controller{

...

function action_search($id){

...}

}

http://example.jp/shop/search/123

Page 19: 10分でわかるFuelPHP @ 2011/12

Controller

Controllerクラスを継承

クラス名には先頭に「Controller_」を付ける

「Controller_」の後の単語の先頭は大文字

アクションメソッド名には先頭に「action_」を付ける

ファイル名やフォルダ名はすべて小文字(FuelPHPでの共通の規約)

クラス名の中の「_」はフォルダ区切りを意味する

Page 20: 10分でわかるFuelPHP @ 2011/12

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/

Page 21: 10分でわかるFuelPHP @ 2011/12

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が優先

Page 22: 10分でわかるFuelPHP @ 2011/12

ControllerURLとクラス名の対応

http://example.jp/time_message

➔class Controller_Time_Message

➔controller/time_message.php

➔クラス名の「_」はフォルダ区切りになるのでこれは使えない → 404

Page 23: 10分でわかるFuelPHP @ 2011/12

ControllerURLとクラス名の対応

http://example.jp/time/time_message

➔class Controller_Time

➔controller/time.php

➔function action_time_message()

➔メソッド名の「_」はOK

Page 24: 10分でわかるFuelPHP @ 2011/12

Controller拡張したクラス

Template Controller

➔ビューのレイアウト機能を追加したもの

➔Controller_Templateクラスを継承する

Rest Controller

➔RESTfulなコントローラ

➔Controller_Restクラスを継承する

Page 25: 10分でわかるFuelPHP @ 2011/12

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のコード

Page 26: 10分でわかるFuelPHP @ 2011/12

View

(オプション)Parserモジュール

以下のテンプレートを標準でサポート

➔ SimpleTags

➔ Mustache

➔ Twig

➔ Jade

➔ Haml

➔ Smarty

packages/parser/README.md参照

Page 27: 10分でわかるFuelPHP @ 2011/12

Model

オプション(使わないことも可能)

ただのPHPのクラス

データベース・アクセスの方法

1. DB::query()

2.Query Builder

3. ORMパッケージ

Page 28: 10分でわかるFuelPHP @ 2011/12

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);

Page 29: 10分でわかるFuelPHP @ 2011/12

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);

Page 30: 10分でわかるFuelPHP @ 2011/12

ORM

1. config.phpでの設定

2. Modelの作成

3. クエリの実行

Page 31: 10分でわかるFuelPHP @ 2011/12

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(){

...}

}

または

Page 32: 10分でわかるFuelPHP @ 2011/12

Modelの使い方その1

メソッドを呼び出す

$data['posts'] = Model_Post::find_all();

class Model_Post extends Model{

function find_all(){

...}

}

Modelのコード

Page 33: 10分でわかるFuelPHP @ 2011/12

Modelの使い方その2

メソッドを呼び出す

$data['posts'] = \Model\Post::find_all();

namespace Model;class Post extends \Model{

function find_all(){

...}

}

Modelのコード

Page 34: 10分でわかるFuelPHP @ 2011/12

Model拡張したクラス

Model_Crudクラス

➔CRUD機能を追加したもの

➔Model_Crudクラスを継承する

Page 35: 10分でわかるFuelPHP @ 2011/12

ORM1. config.phpでの設定

'always_load'  => array('packages'  => array(

'orm',//'auth',

),),

fuel/app/config/config.php

Page 36: 10分でわかるFuelPHP @ 2011/12

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でカラム名を定義する

Page 37: 10分でわかるFuelPHP @ 2011/12

ORM3. クエリの実行

// SQLクエリの実行$result = \Model\Post::find('all');

// 表示処理foreach ($result as $row){

echo $row['id']      . ' ';echo $row['title']   . ' ';echo $row['summary'] . '<br />';

}

echo 'レコード数: ' . count($result);

Page 38: 10分でわかるFuelPHP @ 2011/12

Coreクラス

どんなものがあるか?AgentArrAssetAutoloaderCacheCliConfigCookieCrypt

DatabaseDateDebugEventFieldsetFileFormFormatFtp

FuelHtmlImageInflectorInputLangLogMigrateModel_Crud

Mongo_DbNumPackagePaginationRedisRequestResponseSecuritySession

StrUploadUriValidationView

Page 39: 10分でわかるFuelPHP @ 2011/12

クラスの使い方

静的な呼び出し

<form action="http://localhost/blog/uri/to/form" accept­charset="utf­8" method="post">

echo Form::open('uri/to/form');

出力されるHTML

Page 40: 10分でわかるFuelPHP @ 2011/12

クラスの使い方

インスタンス化

$val = Validation::forge();

$val­>add('title', 'Title')­>add_rule('required');

if ($val­>run()){

...}else{

...}

Page 41: 10分でわかるFuelPHP @ 2011/12

FuelPHPのセキュリティ

フールプルーフではない!

➔フールプルーフとは?「よくわかっていない人が扱っても安全」 -- http://e-words.jp/

➔○○を使っていれば安全

ただし、FuelPHPには、

➔デフォルトのセキュリティ機能

➔手動で利用するセキュリティ機能

• フレームワークを使わない場合より、かなり安全

Page 42: 10分でわかるFuelPHP @ 2011/12

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では自動エスケープ

Page 43: 10分でわかるFuelPHP @ 2011/12

FuelPHPのセキュリティ

セキュリティ機能

➔ Input filtering

• config.phpのsecurity.input_filter

➔ CSRF保護

• 自動ではないが支援機能あり

➔XSS filtering

• HTMLawedというライブラリが付属している

Page 44: 10分でわかるFuelPHP @ 2011/12

FuelPHPの高い拡張性

Coreクラス

➔継承・置き換え可能

• コアクラスを置き換えずに拡張する

• コアクラスを拡張し、置き換える

• パッケージからコアを拡張する

Page 45: 10分でわかるFuelPHP @ 2011/12

公式ドキュメントの翻訳

https://github.com/NEKOGET/FuelPHP_docs_jp

http://press.nekoget.com/fuelphp_doc/

翻訳を手伝ってくれる人を募集中

Page 46: 10分でわかるFuelPHP @ 2011/12

FuelPHPについての日本語情報

FuelPHP まとめ Wikihttp://fuelphp.phpfogapp.com/wiki/

FuelPHP Advent Calendar 2011http://atnd.org/events/22380

Page 47: 10分でわかるFuelPHP @ 2011/12

まとめ

FuelPHPは、シンプルでフレキシブルなコミュニティにより開発されているPHP5.3のフレームワークです。

公式ドキュメントの翻訳を手伝ってくれる人を募集しています。