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

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

  • Upload
    kenjis

  • View
    15.239

  • Download
    3

Embed Size (px)

DESCRIPTION

OSC2012 Nagoya用のFuelPHP紹介資料

Citation preview

10分でわかるFuelPHP

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

2012/5/12@OSC 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.0公式リリース

2011/10/25 1.1.0-RC1リリース

2011/12/13 1.1.0公式リリース

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

FuelPHPとは?

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

Googleトレンドによる検索数

FuelPHPとは?

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

Googleトレンドによる検索数

このへん

FuelPHPの利用例

http://www.owacon.info/

FuelPHPの利用例

http://snipr.it/

フレームワークとは?

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

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

➔機能としては

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

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

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

FuelPHPに向いている人

CodeIgniterを知っている人

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

Kohanaを知っている人

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

Configuration over Convention

➔ 規約が嫌いな人

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

FuelPHPに向いている人

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

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

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

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

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

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

FuelPHPに向いている人

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

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

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

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

// テンプレートに変数を代入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

両方あったら?

➔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クラスを継承する

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のクラス

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

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

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の使い方名前空間なし

メソッドを呼び出す

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

class Model_Post extends Model{

function find_all(){

...}

}

Modelのコード

Modelの使い方名前空間あり

メソッドを呼び出す

$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での設定

2. Modelの作成

3. クエリの実行

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クラス

どんなものがあるか?AgentArrAssetAutoloaderCacheCliConfigCookieCryptDatabase

DateDebugEventFieldsetFileFinderFormFormatFtpFuel

HtmlImageInflectorInputLangLogMarkdownMigrateModel_CrudModule

Mongo_DbNumPackagePaginationProfilerRedisRequestResponseRouterSecurity

SessionStrThemeUploadUriValidationView

クラスの使い方

静的な呼び出し

<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://press.nekoget.com/fuelphp_doc/

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

FuelPHPについての日本語情報

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

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

書籍

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

『FuelPHP Advent Calendar 2011』

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

まとめ

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

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