Top Banner
10分でわかるFuelPHP A simple, flexible, community driven PHP5.3 framework. 2012/5/12 @OSC Nagoya kenjis
49

10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

Jun 04, 2015

Download

Technology

kenjis

OSC2012 Nagoya用のFuelPHP紹介資料
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

10分でわかるFuelPHP

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

2012/5/12@OSC Nagoya

kenjis

Page 2: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPとは?

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

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

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

Page 3: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPとは?

MITライセンス

PHP 5.3以降

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

➔CodeIgniter

➔Kohana

➔Symfony

➔Rails

Page 4: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

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公式リリース

2012/05/06 1.2RC1リリース (←今ここ)

Page 5: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPとは?

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

Googleトレンドによる検索数

Page 6: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPとは?

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

Googleトレンドによる検索数

このへん

Page 7: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPの利用例

http://www.owacon.info/

Page 8: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPの利用例

http://snipr.it/

Page 9: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

フレームワークとは?

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

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

➔機能としては

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

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

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

Page 10: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPに向いている人

CodeIgniterを知っている人

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

Kohanaを知っている人

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

Configuration over Convention

➔ 規約が嫌いな人

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

Page 11: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPに向いている人

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

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

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

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

➔ CodeIgniterのユーザガイドのように見やすいです(ただし、まだ多くの部分が英語)

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

Page 12: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPに向いている人

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

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

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

Page 13: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPを使うメリット

高速な動作

➔軽量で動作が高速

最新のPHPフレームワーク

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

コードや仕様がクリーン

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

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

Page 14: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPを使うメリット

バランス

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

➔ビューのレイアウト機能、モデルのCRUD機能、認証インターフェイス、ORMなど

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

➔ScaffoldingやMigration

Page 15: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

MVCモデルとは?

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

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

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

Page 16: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

MVCモデル

Controller流れの制御など

View画面表示

Modelデータの管理

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

結果

結果

結果

呼び出し

呼び出し

Page 17: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPのフォルダ構成

公式ドキュメント

アプリケーションを配置

FuelPHP本体

FuelPHPのパッケージ

oilコマンド

Web公開領域

フロントコントローラ

Page 18: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPのフォルダ構成

アプリケーションを配置

コントローラを配置

モデルを配置

ビューモデルを配置

ビューを配置

クラスを配置

キャッシュフォルダ

ブートストラップ

設定ファイルを配置

言語ファイルを配置

ログフォルダ

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

モジュールを配置

タスクを配置

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

tmpフォルダ

Page 19: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPのURLの構造

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

class Controller_Shop extends Controller{

...

function action_search($id){

...}

}

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

Page 20: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

Controller

Controllerクラスを継承

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

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

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

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

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

Page 21: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

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/

Page 22: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

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 23: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

ControllerURLとクラス名の対応

http://example.jp/time_message

➔class Controller_Time_Message

➔controller/time_message.php

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

Page 24: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

ControllerURLとクラス名の対応

http://example.jp/time/time_message

➔class Controller_Time

➔controller/time.php

➔function action_time_message()

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

Page 25: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

Controller拡張したクラス

Template Controller

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

➔Controller_Templateクラスを継承する

Rest Controller

➔RESTfulなコントローラ

➔Controller_Restクラスを継承する

Hybrid Controller

➔Rest Controller + Template

➔Controller_Hybridクラスを継承する

Page 26: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

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

Page 27: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

View

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

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

➔ Smarty / Twig / Dwoo / PHPTAL / Mustache / Jade / Haml / Markdown

packages/parser/README.md参照

Page 28: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

Model

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

ただのPHPのクラス

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

1. DB::query()

2.Query Builder

3. ORMパッケージ

Page 29: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

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 30: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

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 31: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

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 @ 2012/05 OSC2012 Nagoya

Modelの使い方名前空間なし

メソッドを呼び出す

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

class Model_Post extends Model{

function find_all(){

...}

}

Modelのコード

Page 33: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

Modelの使い方名前空間あり

メソッドを呼び出す

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

namespace Model;class Post extends \Model{

function find_all(){

...}

}

Modelのコード

Page 34: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

Model拡張したクラス

Model_Crudクラス

➔CRUD機能を追加したもの

➔Model_Crudクラスを継承する

Page 35: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

ORMの使い方

1. config.phpでの設定

2. Modelの作成

3. クエリの実行

Page 36: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

ORMの使い方1. config.phpでの設定

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

'orm',//'auth',

),),

fuel/app/config/config.php

Page 37: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

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

Page 38: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

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

Page 39: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

Coreクラス

どんなものがあるか?AgentArrAssetAutoloaderCacheCliConfigCookieCryptDatabase

DateDebugEventFieldsetFileFinderFormFormatFtpFuel

HtmlImageInflectorInputLangLogMarkdownMigrateModel_CrudModule

Mongo_DbNumPackagePaginationProfilerRedisRequestResponseRouterSecurity

SessionStrThemeUploadUriValidationView

Page 40: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

クラスの使い方

静的な呼び出し

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

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

出力されるHTML

Page 41: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

クラスの使い方

インスタンス化

$val = Validation::forge();

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

if ($val­>run()){

...}else{

...}

Page 42: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPのセキュリティ

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

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

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

ただし、FuelPHPには、

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

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

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

Page 43: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

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 44: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPのセキュリティ

セキュリティ機能

➔ Input filtering

• config.phpのsecurity.input_filter

➔ CSRF保護

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

➔XSS filtering

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

Page 45: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPの高い拡張性

Coreクラス

➔継承・置き換え可能

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

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

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

Page 46: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

公式ドキュメントの翻訳

https://github.com/NEKOGET/FuelPHP_docs_jp

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

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

Page 47: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

FuelPHPについての日本語情報

fuelphp.jp Googleグループhttps://groups.google.com/group/fuelphp_jp?hl=ja

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

書籍

➔ 『FuelPHP Advent Calendar 2011』 技術評論社

Page 48: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

『FuelPHP Advent Calendar 2011』

技術評論社より、2012年3月22日に発売!https://gihyo.jp/dp/sp/advent2011/G11C13

Page 49: 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya

まとめ

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

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