51
10分でわかるFuelPHP A simple, flexible, community driven PHP 5.3 framework. 2013/04/13 @ FuelPHP入門ハンズオン vol.1 kenjis

10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

  • Upload
    kenjis

  • View
    22.900

  • Download
    3

Embed Size (px)

Citation preview

Page 1: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

10分でわかるFuelPHP

A simple, flexible, community driven PHP 5.3 framework.

2013/04/13 @ FuelPHP入門ハンズオン vol.1kenjis

Page 2: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPとは?

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

2011/7/30、初の公式リリース1.0.0 公式サイト http://fuelphp.com/

Page 3: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPとは?

MITライセンス PHP 5.3以降 いろいろなフレームワークのいいとこ取り

➔CodeIgniter➔Kohana➔Symfony➔Rails

Page 4: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPとは?

2010/末 開発開始 2011/01/08 1.0.0-BETA1リリース 2011/07/30 1.0リリース 2011/12/13 1.1リリース 2012/06/03 1.2リリース 2012/09/09 1.3リリース 2012/11/09 1.4リリース 2013/01/20 1.5リリース 2013/03/08 1.5.3リリース (←今ここ)

Page 5: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPとは?

日本での4大PHPフレームワークの1つ

Googleトレンドによる検索数(2013/4/7)

Page 6: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPとは?

日本での4大PHPフレームワークの1つ

Googleトレンドによる検索数(2013/4/7)

Page 7: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPの利用例

http://animita.tv/

Page 8: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPの利用例

http://bushidotickets.com/

Page 9: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

フレームワークとは?

Webアプリケーションフレームワークとは?➔Webアプリケーションを作成する「枠組み」➔機能としては• 過去のプログラミングの経験則の規約化• 頻繁に使う機能を抽象化(モジュール化、

ライブラリ化)➔Webアプリケーション全体を見通しよく

開発できるようにするもの

Page 10: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPに向いている人 CodeIgniterを知っている人

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

Kohanaを知っている人➔Kohanaも参考に作られていますので、さらに

似ている(Kohana+α=FuelPHP) Configuration over Convention

➔規約が嫌いな人➔CodeIgniter系のフレームワークなので、

強制的な規約は最小限になっている

Page 11: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPに向いている人

軽量高速なフレームワークが好きな人 フレームワークをいろいろ拡張したい人

➔CodeIgniterのように拡張できます 見やすいドキュメントが好きな人

➔CodeIgniterのユーザガイドのように見やすいです(ただし、翻訳率は現在67%程度)

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

Page 12: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPに向いている人

他のフレームワークに挫折した人➔規約が多すぎて覚えきれない➔デカすぎてソース読めないから嫌

Page 13: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPを使うメリット

高速な動作➔軽量で動作が高速

最新のPHPフレームワーク➔PHP 5.3以降なので、5.3の機能をフルに

使える コードや仕様がクリーン

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

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

Page 14: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPを使うメリット

バランス➔CodeIgniterよりは広い範囲をカバー

している(多機能)➔ビューのレイアウト機能、モデルの

CRUD機能、HMVC、認証インターフェイス、ORM、PHPUnitでのテストなど

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

Page 15: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

MVCモデルとは?

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

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

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

Page 16: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

MVCモデル

Controller流れの制御など

View画面表示

Modelデータの管理

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

結果

結果

結果

呼び出し

呼び出し

Page 17: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPのフォルダ構成

公式ドキュメント

アプリケーションを配置

FuelPHP本体

FuelPHPのパッケージ

oilコマンド

Web公開領域

フロントコントローラ

css、img、js

Page 18: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPのフォルダ構成

アプリケーションを配置

コントローラを配置モデルを配置ビューモデルを配置

ビューを配置

クラスを配置キャッシュフォルダブートストラップ

設定ファイルを配置言語ファイルを配置ログフォルダマイグレーションファイルを配置モジュールを配置タスクを配置

サードパーティライブラリを配置tmpフォルダ

Page 19: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

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 @ 2013/04 FuelPHP入門ハンズオン vol.1

Controller Controllerクラスを継承 クラス名には先頭に「Controller_」を付ける 「Controller_」の後の単語の先頭は大文字 アクションメソッド名には先頭に「action_」を付ける

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

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

Page 21: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

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 @ 2013/04 FuelPHP入門ハンズオン vol.1

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 @ 2013/04 FuelPHP入門ハンズオン vol.1

ControllerURLとクラス名の対応

http://example.jp/time_message➔class Controller_Time_Message➔controller/time_message.php ?➔クラス名の「_」はフォルダ区切りにな

るのでこれは使えない → 404

Page 24: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

ControllerURLとクラス名の対応

http://example.jp/time/time_message➔class Controller_Time➔controller/time.php➔function action_time_message()➔メソッド名の「_」はOK

Page 25: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

Controller拡張したクラス

Template Controller➔ビューのレイアウト機能を追加したもの➔Controller_Templateクラスを継承する

Rest Controller➔RESTfulなコントローラ➔Web APIがすぐに作成できる➔Controller_Restクラスを継承する

Hybrid Controller➔Rest Controller + Template➔Controller_Hybridクラスを継承する

Page 26: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

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 @ 2013/04 FuelPHP入門ハンズオン vol.1

View

(オプション)Parserモジュール 以下のテンプレートを標準でサポート

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

packages/parser/README.md参照

Page 28: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

Model

オプション(使わないことも可能) ただのPHPのクラス データベース・アクセスの方法

➔DB::query()➔Query Builder➔ORMパッケージ

Page 29: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

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 @ 2013/04 FuelPHP入門ハンズオン vol.1

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 @ 2013/04 FuelPHP入門ハンズオン vol.1

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 @ 2013/04 FuelPHP入門ハンズオン vol.1

Modelの使い方名前空間なし

メソッドを呼び出す$data['posts'] = Model_Post::find_all();

class Model_Post extends Model{

function find_all(){

...}

}

Modelのコード

Page 33: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

Modelの使い方名前空間あり

メソッドを呼び出す$data['posts'] = \Model\Post::find_all();

namespace Model;class Post extends \Model{

function find_all(){

...}

}

Modelのコード

Page 34: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

Model拡張したクラス

Model_Crudクラス➔CRUD機能を追加したもの➔Model_Crudクラスを継承する

Page 35: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

ORMの使い方

1. config.phpでの設定2. Modelの作成3. クエリの実行

Page 36: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

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

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

'orm',//'auth',

),),

fuel/app/config/config.php

Page 37: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

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 @ 2013/04 FuelPHP入門ハンズオン vol.1

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 @ 2013/04 FuelPHP入門ハンズオン vol.1

Coreクラス どんなものがあるか?

AgentArrAssetAutoloaderCacheCliConfigCookieCryptDatabase

DateDebugEventFieldsetFileFinderFormFormatFtpFuel

HtmlImageInflectorInputLangLogMarkdownMigrateModel_CrudModule

Mongo_DbNumPackagePaginationProfilerRedisRequestResponseRouterSecurity

SessionStrThemeUploadUriValidationView

Page 40: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

クラスの使い方

静的な呼び出し

<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 @ 2013/04 FuelPHP入門ハンズオン vol.1

クラスの使い方

インスタンス化$val = Validation::forge();

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

if ($val­>run()){

...}else{

...}

Page 42: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPのセキュリティ

フールプルーフではない!➔フールプルーフとは?

「よくわかっていない人が扱っても安全」 -- http://e-words.jp/

➔○○を使っていれば安全 ただし、FuelPHPには、

➔デフォルトのセキュリティ機能➔手動で利用するセキュリティ機能• フレームワークを使わない場合より、

かなり安全

Page 43: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

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 @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPのセキュリティ

セキュリティ機能➔Input filtering• config.phpのsecurity.input_filter

➔CSRF保護• 自動ではないが支援機能あり

➔XSS filtering• HTMLawedというライブラリが付属

Page 45: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPの高い拡張性

Coreクラス➔継承・置き換え可能• コアクラスを置き換えずに拡張する• コアクラスを拡張し、置き換える• パッケージからコアを拡張する

Page 46: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

公式ドキュメントの翻訳

https://github.com/NEKOGET/FuelPHP_docs_jp http://fuelphp.jp/ 翻訳を手伝ってくれる人を募集中

Page 47: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPについての日本語情報

FuelPHP まとめ Wikihttp://wiki.fuelphp1st.com/wiki/

Page 48: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPについての日本語コミュニティ

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

twitter 「fuelphp」で検索https://twitter.com/search/realtime?q=fuelphp&src=typd

facebook FuelPHP日本語ニュースhttps://www.facebook.com/jp.fuel

Page 49: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

FuelPHPについての書籍

『FuelPHP Advent Calendar 2011』技術評論社 『FuelPHP入門』ソーテック社 『はじめてのフレームワークとしてのFuelPHP』達人出版会

『FuelPHP Advent Calendar 2012』達人出版会

Page 51: 10分でわかるFuelPHP @ 2013/04 FuelPHP入門ハンズオン vol.1

まとめ

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

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