SlideShare a Scribd company logo
1 of 40
はじめての FuelPHP

        Jul. 8, 2012
   FuelPHP 勉強会 東京



           sho <sho@codeigniter.jp>
本発表の主な対象者


PHP で Web アプリをつくったことがある

          &&


  フレームワークを使ってみたい
もくじ

• FuelPHP とは

• インストール

• MVC

• 便利な機能

• 参考情報
とは
参考: http://fuelphp.com/
FuelPHP とは

     オープンソースの PHP (>=5.3) フレームワーク
     MIT License (*1)
                •      無償で無制限に扱って良い
                       (ソースコードの公開義務なし)
                •      著作権表示、許諾表示をソフトウェアのすべての複製
                       または重要な部分に記載しなければならない
                •      作者はソフトウェアに関してなんら責任を負わない
     2011年 7月に登場
     CodeIgniter ライク

*1 参考: http://ja.wikipedia.org/wiki/MIT_License
特徴
     AN (H)MVC FRAMEWORK
               • MVC モデルに準拠


     MODULAR AND EXTENDABLE TO A FAULT
               • 気に入らない部分は拡張可能




参考: http://fuelphp.com/features
特徴
SECURITY
    • XSS、CSRF、SQL インジェクションの対策 etc.


OIL: THE POWER OF THE COMMAND LINE
    • 強力なコマンドライン (使わなくても良い)
    • コードの生成、DB マイグレーション、
      デバッグ etc.
特徴
BASE CLASSES FOR CONTROLLERS AND MODELS
   • 高機能な基底クラス
   • Controller_Rest, Model_Crud etc.


POWERFUL YET LIGHTWEIGHT ORM INCLUDED
   • 強力な OR マッパ
   • CRUD (Create / Read/ Update / Delete)
   • belongs-to, has-one, has-many, many-many
特徴
AUTHENTIFICATION FRAMEWORK
    • 認証機能を簡単に実装可能


USE ANY TEMPLATE PARSER FOR YOUR VIEWS
    • 様々なテンプレートパーサに対応
    • mustache, Markdown, Smarty, Twig, Haml,
      Jade, Dwoo, PHPTAL
Namespace                         (PHP >= 5.3)


     クラス、関数、定数の衝突を避ける機能
               • namespace <空間名>;
                    <?php                                                    関同
                                                                             数じ
                                                                             を名
                    namespace hoge¥fuga;
                    function myFunc() { echo '¥hoge¥fuga' . "¥n"; }
                                                                             定前
                                                                             義の
                    namespace hoge¥moge;                                     でク
                    function myFunc() { echo '¥hoge¥moge' . "¥n"; }          きラ
                                                                             るス
                                                                              や
                    myFunc();                               // ¥hoge¥moge
                    ¥hoge¥fuga¥myFunc();                     // ¥hoge¥fuga

                    namespace hoge;
                    fuga¥myFunc();                          // ¥hoge¥fuga
参考: http://www.php.net/manual/ja/language.namespaces.definition.php
インストール
インストール (Mac, Unix)
    Quick Installation:
            $ curl get.fuelphp.com/oil | sh
            $ oil create <ディレクトリ名>




    参考: http://get.fuelphp.com/oil の中身 (抜粋)
            sudo sh -c "curl --silent http://get.fuelphp.com/installer.sh > ${PREFIX}oil”
            sudo chmod +x ${PREFIX}oil


    参考: http://get.fuelphp.com/installer.sh の中身 (抜粋)
            git clone --recursive git://github.com/fuel/fuel.git "./$2"
            php "./$2/oil" refine install



参考: http://docs.fuelphp.com/
ディレクトリ構成 (の一部)
/
├fuel/
│├app/
││├classes/
│││├controller/ … Controller
│││└model/ ……… Model
││├config/ ………… 設定ファイル
││└view/ …………… View
│└core/
│
└public/ ……………… 公開ディレクトリ
  ├assets/
  │└{css/, img/, js/}
  └index.php
config の切替 (開発環境、本番環境)
     fuel/app/config/
               • development/ …… 開発環境の設定値
               • production/ ………. 本番                            〃
               • config.php 他 …… 共通の設定値
               - 深い方が優先
               - デフォルトは development                        (via fuel/app/bootstrap.php)

               - production に切替:
                                                                 .htaccess
                              SetEnv FUEL_ENV production


参考: http://docs.fuelphp.com/general/environments.html
MVC
MVC モデル

     ソフトウェアを次の 3 つの構造に分割する手法
           – Model
                  • データの入出力

           – View                                           Controller
                  • データの表示

           – Controller                              View                Model
                  • Model と View の制御           HTM
                                                L

                  • ユーザの入力に応答                                     File
                                                                            Database



参考: http://docs.fuelphp.com/general/mvc.html
Controller

     • クラス名は Controller_Hoge
     • URL から呼び出せるメソッドは action_fuga()
     •      ¥Fuel¥core¥         Controller クラスを継承
     • fuel/app/classes/controller/ に配置
                                                  fuel/app/classes/controller/hoge.php
                 class Controller_Hoge extends Controller {
                      :
                    public function action_fuga($arg1, $arg2 = NULL) {
                         :
                        return Response::forge(View::forge('welcome/index'));
                    }
                 }

参考: http://docs.fuelphp.com/general/controllers/base.html
Controller

     URL との対応
              http://example.jp/hoge/public/index.php/ hoge / fuga / piyo
                                                                                  クラス   メソッド   引数




                                                  fuel/app/classes/controller/hoge.php
                 class Controller_Hoge extends Controller {
                      :
                    public function action_fuga($arg1, $arg2 = NULL) {
                         :
                        return Response::forge(View::forge('welcome/index'));
                    }
                 }

参考: http://docs.fuelphp.com/general/controllers/base.html#/what_is_a_controller
Controller の返り値

     Controller は必ず、次のいずれかを返す
                • Response オブジェクト
                • 文字列、文字列にキャスト可能なオブジェクト
                      •      e.g.) View

                                                   fuel/app/classes/controller/hoge.php
                  class Controller_Hoge extends Controller {
                       :
                     public function action_fuga($arg1, $arg2 = NULL) {
                          :
                         return Response::forge(View::forge('welcome/index'));
                     }
                  }                                               return した内容が
                                                                 ブラウザに表示される
参考: http://docs.fuelphp.com/general/controllers/base.html#/returning_results
“文字列にキャスト可能” ?

     “__toString()” メソッドを持つオブジェクト
                    <?php
                    class TestClass {
                       public $foo;

                        public function __construct($foo) {
                          $this->foo = $foo;
                        }

                        public function __toString() {
                          return $this->foo;
                        }
                    }

                    $class = new TestClass('Hello');
                    echo $class; // 'Hello'
参考: http://www.php.net/manual/ja/language.oop5.magic.php#object.tostring
Response オブジェクト

     ブラウザへの応答を制御
                forge() で生成:

           Response::forge($body = null, $status = 200, $headers = array())


                • $body: 本文 (string)
                • $status: HTTP ステータスコード
                • $headers: HTTP ヘッダ



参考: http://docs.fuelphp.com/classes/response.html
Controller::before(), after()

     before()
                • コンストラクタのようなもの
                • action_*() の前に実行される
                • URL で指定された action_*() が存在しなくても
                  実行される
     after($response)
                • action_*() の後に実行される
                • URL で指定された action_*() が存在しないと
                  実行さない
参考: http://docs.fuelphp.com/general/controllers/base.html#/special_methods
View

     • 基本は HTML
     • fuel/app/views/ に配置
     • Controller から View::forge() で呼出し

                    View::forge('ファイル名' [, View 変数])


               e.g.)               fuel/app/views/ hoge / fuga.php

                                                 ↑
                                     View::forge('hoge / fuga')

参考: http://docs.fuelphp.com/general/views.html
View: 変数

     Controller で値をセット
               • View::forge() の第2引数
                        $data = array('name' => 'sho');
                        return $view->forge('hoge', $data);

               • View::set()
                         $view = View::forge('hoge');
                         $view->set('name', 'sho'); // or $view->name = 'sho'
                         return $view;


     View で出力 (※自動で HTML エスケープ)
                        <?php echo $name; ?>

参考: http://docs.fuelphp.com/general/views.html
View: src=“〜”, href=“〜” の path
     • Asset::css(), js(), img(), Html::anchor()
          <?php echo Asset::css('bootstrap.css'); ?>
                                               ↓
          <link type="text/css" rel="stylesheet"
          href="http://example.jp/fuel/public/assets/css/bootstrap.css?1341579
          959" />


     • Uri::base(false)
                index.php までの URL を返す
          <a href=“<?php echo Uri::base(false); ?>welcome/hello”>…

参考: http://docs.fuelphp.com/classes/uri.html
Model

     • クラス名は Model_Hoge
     •     ¥Fuel¥core¥         Model クラスを継承
     • fuel/app/classes/model/ に配置
     • Controller から new で生成                           (ロード不要)

                     $hoge = new Model_Hoge();



     基底クラスの定義:
                                                  fuel/core/classes/model.php
                     class Model {}
参考: http://docs.fuelphp.com/general/models.html
Query Builder

     SQL クエリを生成
                e.g.)
                    $query = DB::select()
                             ->from('members')
                             ->where('member_id', '>=', 2)
                             ->order_by('member_id', 'asc');

                    $result = $query->execute()->as_array();

                                                       ↓
                   SELECT * FROM `members` WHERE `member_id` >= 2
                   ORDER BY `member_id` ASC;

参考: http://docs.fuelphp.com/classes/database/qb.html
Model_Crud

     DB の CRUD 操作を行うメソッドが予め実装

                 find_by_pk()                  主キーを指定して一行取得
                 find_all()                    全行取得
                 find()                        条件に一致する行を全行取得
                 save()                        保存 (update / insert)
                 delete()                      削除
                    :




参考: http://docs.fuelphp.com/classes/model_crud/methods.html
Model_Crud: 使用例

                                                                          members テーブル
                  member_id                          int(), PK, AI
                  name                               varchar(20)
                  votes                              int()


     Model の定義
                                                         fuel/core/classes/model/member.php
                    class Model_Member extends Model_Crud {
                       protected static $_table_name = 'members';
                       protected static $_primary_key = 'member_id';
                    }


参考: http://docs.fuelphp.com/classes/model_crud/introduction.html
Model_Crud: 使用例

e.g.) データ挿入
                         fuel/core/classes/controller/akb.php
    $member = new Model_Member();
    $member->name = '大島 優子';
    $member->votes = 108837;
    $member->save();

    $member = new Model_Member(); // 新しい行
    $member->name = '渡辺 麻友';
    $member->votes = 72574;
    $member->save();

           member_id    name         votes
                       1 大島 優子         108,837
                       2 渡辺 麻友          72,574
Model_Crud: 使用例

e.g.) データ更新
                            fuel/core/classes/controller/akb.php
    $member = Model_Member::find_by_pk(13);
    $member->votes += 100000;
    $member->save();


   id name       votes              id name          votes
   1 大島 優子        108,837            1 大島 優子          108,837
   2 渡辺 麻友         72,574            2 渡辺 麻友            72,574
             :
                            →                    :
   13 北原 里英        26,531           13 北原 里英          126,531
             :                                   :
便利な機能
様々なライブラリ
Validation Class
    • ユーザ入力の正当性を検証
    • @wakuworks さんのセッションに期待!
Security Class
    • CSRF 対策など
Pagination Class
    • ページ送り
                                etc.
Profiling

     実行結果を分析して表示
                                                     fuel/app/config/config.php
                    'profiling' => true,




参考: http://docs.fuelphp.com/general/profiling.html
Controller_Rest クラス

     RESTful のサポート
                • Controller_Rest クラスを継承
                • HTTP メソッドによって切替
                      •      GET,POST,PUT,DELETE
                          function <HTTP メソッド名>_<アクション名>()

                • 指定されたフォーマットで出力
                      •      xml, json, csv, html, php, serialize
                          http://〜/〜/<コントローラ名>.<フォーマット>


参考: http://docs.fuelphp.com/general/controllers/rest.html
Controller_Rest クラス
                                     fuel/app/classes/controller/test.php
e.g.)
        class Controller_Test extends Controller_Rest {
           public function get_member($member_id) {
             $this->response(array(
                 'member_id' => 13,
                 'name' => '北原 里英',
                 'votes' => 26531
             ));
           }
        }

                                   ↓
                           http://example.jp/fuel/public/ test/member/13.json
        {"member_id":13,"name":"¥u5317¥u539f
        ¥u91cc¥u82f1","votes":26531}
参考情報

FuelPHP まとめ Wiki
       http://fuelphp.phpfogapp.com/wiki/

参考書籍
次回予告?

だれかやってください!
  • oil
  • Orm¥Model
  • auth
おわり

More Related Content

What's hot

PHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件についてPHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件について
健治郎 安井
 

What's hot (20)

10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya 10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
10分でわかるFuelPHP @ 2012/05 OSC2012 Nagoya
 
Fuel php osc tokyo2012
Fuel php osc tokyo2012Fuel php osc tokyo2012
Fuel php osc tokyo2012
 
実"戦"CakePHP Plugin
実"戦"CakePHP Plugin実"戦"CakePHP Plugin
実"戦"CakePHP Plugin
 
omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜omoon.org の裏側 〜FuelPHP の task 活用例〜
omoon.org の裏側 〜FuelPHP の task 活用例〜
 
NetBeansではじめる FuelPHP
NetBeansではじめる FuelPHPNetBeansではじめる FuelPHP
NetBeansではじめる FuelPHP
 
FuelPHPでのファイルアップロード
FuelPHPでのファイルアップロード FuelPHPでのファイルアップロード
FuelPHPでのファイルアップロード
 
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月NetBeans、FuelPHP と過ごしたこの 2 ヶ月
NetBeans、FuelPHP と過ごしたこの 2 ヶ月
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
PHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件についてPHP buildpackでhackとphalconが動いた件について
PHP buildpackでhackとphalconが動いた件について
 
Fuelphp1.8を始めたい
Fuelphp1.8を始めたいFuelphp1.8を始めたい
Fuelphp1.8を始めたい
 
Osc2014
Osc2014Osc2014
Osc2014
 
10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya10分でわかるFuelPHP @ OSC2013 Nagoya
10分でわかるFuelPHP @ OSC2013 Nagoya
 
CodeIgniter入門
CodeIgniter入門CodeIgniter入門
CodeIgniter入門
 
あらためてPHP5.3
あらためてPHP5.3あらためてPHP5.3
あらためてPHP5.3
 
Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4Cakephp勉強会@tokyo #4
Cakephp勉強会@tokyo #4
 
PHPの今とこれから2014
PHPの今とこれから2014PHPの今とこれから2014
PHPの今とこれから2014
 
第21回Creators MeetUp
第21回Creators MeetUp第21回Creators MeetUp
第21回Creators MeetUp
 
PHP勉強会 #51
PHP勉強会 #51PHP勉強会 #51
PHP勉強会 #51
 
Web技術勉強会23回目
Web技術勉強会23回目Web技術勉強会23回目
Web技術勉強会23回目
 
Good Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX PhilosophyGood Parts of PHP and the UNIX Philosophy
Good Parts of PHP and the UNIX Philosophy
 

Viewers also liked

Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話
Keishi Hosoba
 
Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法
nasneg
 
Fuel php勉強会東京vol2 発表資料_モデル間リレーション
Fuel php勉強会東京vol2 発表資料_モデル間リレーションFuel php勉強会東京vol2 発表資料_モデル間リレーション
Fuel php勉強会東京vol2 発表資料_モデル間リレーション
web2citizen
 
CakePHP vs FuelPHP
CakePHP vs FuelPHPCakePHP vs FuelPHP
CakePHP vs FuelPHP
Sotaro Omura
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Hidenori Goto
 

Viewers also liked (16)

Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話Fuel phpをcomposerに本気で対応させた時の話
Fuel phpをcomposerに本気で対応させた時の話
 
Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法Composerを利用した FuelPHPのパッケージ管理方法
Composerを利用した FuelPHPのパッケージ管理方法
 
FuelPHP + Pagoda Box
FuelPHP + Pagoda BoxFuelPHP + Pagoda Box
FuelPHP + Pagoda Box
 
ぺちぱな。 はじまり
ぺちぱな。 はじまりぺちぱな。 はじまり
ぺちぱな。 はじまり
 
Ospn fuel php
Ospn fuel phpOspn fuel php
Ospn fuel php
 
PHPカンファレンス 2012 フレームワークアップデート FuelPHP
PHPカンファレンス 2012 フレームワークアップデート FuelPHPPHPカンファレンス 2012 フレームワークアップデート FuelPHP
PHPカンファレンス 2012 フレームワークアップデート FuelPHP
 
Fuel php勉強会東京vol2 発表資料_モデル間リレーション
Fuel php勉強会東京vol2 発表資料_モデル間リレーションFuel php勉強会東京vol2 発表資料_モデル間リレーション
Fuel php勉強会東京vol2 発表資料_モデル間リレーション
 
あにみた!(PHPカンファレンス用資料)
あにみた!(PHPカンファレンス用資料)あにみた!(PHPカンファレンス用資料)
あにみた!(PHPカンファレンス用資料)
 
Let’s translate FuelPHP docs!
Let’s translate FuelPHP docs!Let’s translate FuelPHP docs!
Let’s translate FuelPHP docs!
 
CakePHP vs FuelPHP
CakePHP vs FuelPHPCakePHP vs FuelPHP
CakePHP vs FuelPHP
 
フレームワーク入門書の決定版が完成
フレームワーク入門書の決定版が完成フレームワーク入門書の決定版が完成
フレームワーク入門書の決定版が完成
 
CakePHP Console Application 拡張Tips
CakePHP Console Application 拡張TipsCakePHP Console Application 拡張Tips
CakePHP Console Application 拡張Tips
 
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
XML と PHP のイケナイ関係 (セキュリティ的な意味で) -Introduction of XXE attack and XML Bomb with...
 
8時間耐久CakePHP2 勉強会
8時間耐久CakePHP2 勉強会8時間耐久CakePHP2 勉強会
8時間耐久CakePHP2 勉強会
 
8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室8時間耐久PHPUnitの教室
8時間耐久PHPUnitの教室
 
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoyaSymfony2 チュートリアル イントロダクション osc 2011 nagoya
Symfony2 チュートリアル イントロダクション osc 2011 nagoya
 

Similar to はじめての FuelPHP

Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
Sotaro Karasawa
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
Yusuke Ando
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
Hiroaki Murayama
 
FuelPHPでSentry導入
FuelPHPでSentry導入FuelPHPでSentry導入
FuelPHPでSentry導入
fagai
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
龍一 田中
 
Php5 4勉強会
Php5 4勉強会Php5 4勉強会
Php5 4勉強会
Yuji Otani
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
do_aki
 
Go言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springGo言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 spring
Takuya Ueda
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
Yuki Takei
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
tamtam180
 

Similar to はじめての FuelPHP (20)

Modern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI SeminarModern PHP Programming @ PFI Seminar
Modern PHP Programming @ PFI Seminar
 
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniterWTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
Ruby on Rails Tutorial
Ruby on Rails TutorialRuby on Rails Tutorial
Ruby on Rails Tutorial
 
20091030cakephphandson 01
20091030cakephphandson 0120091030cakephphandson 01
20091030cakephphandson 01
 
WebAPIではじめるphp入門
WebAPIではじめるphp入門WebAPIではじめるphp入門
WebAPIではじめるphp入門
 
CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100CakePHP 1 to 2 Migration tips 100
CakePHP 1 to 2 Migration tips 100
 
最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)最新PHP事情 (2000年7月22日,PHPカンファレンス)
最新PHP事情 (2000年7月22日,PHPカンファレンス)
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
FuelPHPでSentry導入
FuelPHPでSentry導入FuelPHPでSentry導入
FuelPHPでSentry導入
 
Web技術勉強会 20100925
Web技術勉強会 20100925Web技術勉強会 20100925
Web技術勉強会 20100925
 
Php5 4勉強会
Php5 4勉強会Php5 4勉強会
Php5 4勉強会
 
<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー<第1回>Laravelハンズオンセミナー
<第1回>Laravelハンズオンセミナー
 
Php in ruby
Php in rubyPhp in ruby
Php in ruby
 
Go言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 springGo言語で作る webアプリ@gocon 2013 spring
Go言語で作る webアプリ@gocon 2013 spring
 
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
自作node.jsフレームワークとnginxを使ってラジオサイトを作ってみた
 
モダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasiaモダンmod_perl入門 #yapcasia
モダンmod_perl入門 #yapcasia
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 
LaravelでAPI定義を管理する
LaravelでAPI定義を管理するLaravelでAPI定義を管理する
LaravelでAPI定義を管理する
 
PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!PHP 2大 web フレームワークの徹底比較!
PHP 2大 web フレームワークの徹底比較!
 

More from Sho A (8)

HTTP入門
HTTP入門HTTP入門
HTTP入門
 
ドメイン名入門
ドメイン名入門ドメイン名入門
ドメイン名入門
 
Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門Ansible ではじめるインフラのコード化入門
Ansible ではじめるインフラのコード化入門
 
DNS 入門
DNS 入門DNS 入門
DNS 入門
 
Unix コマンド入門
Unix コマンド入門Unix コマンド入門
Unix コマンド入門
 
Unix 基礎
Unix 基礎Unix 基礎
Unix 基礎
 
Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]Let’s translate FuelPHP docs! [RELOADED]
Let’s translate FuelPHP docs! [RELOADED]
 
PHPフレームワーク入門
PHPフレームワーク入門PHPフレームワーク入門
PHPフレームワーク入門
 

Recently uploaded

Recently uploaded (11)

業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
業務で生成AIを活用したい人のための生成AI入門講座(社外公開版:キンドリルジャパン社内勉強会:2024年4月発表)
 
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
論文紹介:Selective Structured State-Spaces for Long-Form Video Understanding
 
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
LoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイスLoRaWANスマート距離検出センサー  DS20L  カタログ  LiDARデバイス
LoRaWANスマート距離検出センサー DS20L カタログ LiDARデバイス
 
新人研修 後半 2024/04/26の勉強会で発表されたものです。
新人研修 後半        2024/04/26の勉強会で発表されたものです。新人研修 後半        2024/04/26の勉強会で発表されたものです。
新人研修 後半 2024/04/26の勉強会で発表されたものです。
 
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
論文紹介: The Surprising Effectiveness of PPO in Cooperative Multi-Agent Games
 
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
論文紹介:Video-GroundingDINO: Towards Open-Vocabulary Spatio-Temporal Video Groun...
 
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その32024/04/26の勉強会で発表されたものです。
 
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
NewSQLの可用性構成パターン(OCHaCafe Season 8 #4 発表資料)
 
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
Observabilityは従来型の監視と何が違うのか(キンドリルジャパン社内勉強会:2022年10月27日発表)
 
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアルLoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
LoRaWAN スマート距離検出デバイスDS20L日本語マニュアル
 
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
Amazon SES を勉強してみる その22024/04/26の勉強会で発表されたものです。
 

はじめての FuelPHP

  • 1. はじめての FuelPHP Jul. 8, 2012 FuelPHP 勉強会 東京 sho <sho@codeigniter.jp>
  • 2. 本発表の主な対象者 PHP で Web アプリをつくったことがある && フレームワークを使ってみたい
  • 3. もくじ • FuelPHP とは • インストール • MVC • 便利な機能 • 参考情報
  • 6. FuelPHP とは オープンソースの PHP (>=5.3) フレームワーク MIT License (*1) • 無償で無制限に扱って良い (ソースコードの公開義務なし) • 著作権表示、許諾表示をソフトウェアのすべての複製 または重要な部分に記載しなければならない • 作者はソフトウェアに関してなんら責任を負わない 2011年 7月に登場 CodeIgniter ライク *1 参考: http://ja.wikipedia.org/wiki/MIT_License
  • 7. 特徴 AN (H)MVC FRAMEWORK • MVC モデルに準拠 MODULAR AND EXTENDABLE TO A FAULT • 気に入らない部分は拡張可能 参考: http://fuelphp.com/features
  • 8. 特徴 SECURITY • XSS、CSRF、SQL インジェクションの対策 etc. OIL: THE POWER OF THE COMMAND LINE • 強力なコマンドライン (使わなくても良い) • コードの生成、DB マイグレーション、 デバッグ etc.
  • 9. 特徴 BASE CLASSES FOR CONTROLLERS AND MODELS • 高機能な基底クラス • Controller_Rest, Model_Crud etc. POWERFUL YET LIGHTWEIGHT ORM INCLUDED • 強力な OR マッパ • CRUD (Create / Read/ Update / Delete) • belongs-to, has-one, has-many, many-many
  • 10. 特徴 AUTHENTIFICATION FRAMEWORK • 認証機能を簡単に実装可能 USE ANY TEMPLATE PARSER FOR YOUR VIEWS • 様々なテンプレートパーサに対応 • mustache, Markdown, Smarty, Twig, Haml, Jade, Dwoo, PHPTAL
  • 11. Namespace (PHP >= 5.3) クラス、関数、定数の衝突を避ける機能 • namespace <空間名>; <?php 関同 数じ を名 namespace hoge¥fuga; function myFunc() { echo '¥hoge¥fuga' . "¥n"; } 定前 義の namespace hoge¥moge; でク function myFunc() { echo '¥hoge¥moge' . "¥n"; } きラ るス や myFunc(); // ¥hoge¥moge ¥hoge¥fuga¥myFunc(); // ¥hoge¥fuga namespace hoge; fuga¥myFunc(); // ¥hoge¥fuga 参考: http://www.php.net/manual/ja/language.namespaces.definition.php
  • 13. インストール (Mac, Unix) Quick Installation: $ curl get.fuelphp.com/oil | sh $ oil create <ディレクトリ名> 参考: http://get.fuelphp.com/oil の中身 (抜粋) sudo sh -c "curl --silent http://get.fuelphp.com/installer.sh > ${PREFIX}oil” sudo chmod +x ${PREFIX}oil 参考: http://get.fuelphp.com/installer.sh の中身 (抜粋) git clone --recursive git://github.com/fuel/fuel.git "./$2" php "./$2/oil" refine install 参考: http://docs.fuelphp.com/
  • 14. ディレクトリ構成 (の一部) / ├fuel/ │├app/ ││├classes/ │││├controller/ … Controller │││└model/ ……… Model ││├config/ ………… 設定ファイル ││└view/ …………… View │└core/ │ └public/ ……………… 公開ディレクトリ ├assets/ │└{css/, img/, js/} └index.php
  • 15. config の切替 (開発環境、本番環境) fuel/app/config/ • development/ …… 開発環境の設定値 • production/ ………. 本番 〃 • config.php 他 …… 共通の設定値 - 深い方が優先 - デフォルトは development (via fuel/app/bootstrap.php) - production に切替: .htaccess SetEnv FUEL_ENV production 参考: http://docs.fuelphp.com/general/environments.html
  • 16. MVC
  • 17. MVC モデル ソフトウェアを次の 3 つの構造に分割する手法 – Model • データの入出力 – View Controller • データの表示 – Controller View Model • Model と View の制御 HTM L • ユーザの入力に応答 File Database 参考: http://docs.fuelphp.com/general/mvc.html
  • 18. Controller • クラス名は Controller_Hoge • URL から呼び出せるメソッドは action_fuga() • ¥Fuel¥core¥ Controller クラスを継承 • fuel/app/classes/controller/ に配置 fuel/app/classes/controller/hoge.php class Controller_Hoge extends Controller { : public function action_fuga($arg1, $arg2 = NULL) { : return Response::forge(View::forge('welcome/index')); } } 参考: http://docs.fuelphp.com/general/controllers/base.html
  • 19. Controller URL との対応 http://example.jp/hoge/public/index.php/ hoge / fuga / piyo クラス メソッド 引数 fuel/app/classes/controller/hoge.php class Controller_Hoge extends Controller { : public function action_fuga($arg1, $arg2 = NULL) { : return Response::forge(View::forge('welcome/index')); } } 参考: http://docs.fuelphp.com/general/controllers/base.html#/what_is_a_controller
  • 20. Controller の返り値 Controller は必ず、次のいずれかを返す • Response オブジェクト • 文字列、文字列にキャスト可能なオブジェクト • e.g.) View fuel/app/classes/controller/hoge.php class Controller_Hoge extends Controller { : public function action_fuga($arg1, $arg2 = NULL) { : return Response::forge(View::forge('welcome/index')); } } return した内容が ブラウザに表示される 参考: http://docs.fuelphp.com/general/controllers/base.html#/returning_results
  • 21. “文字列にキャスト可能” ? “__toString()” メソッドを持つオブジェクト <?php class TestClass { public $foo; public function __construct($foo) { $this->foo = $foo; } public function __toString() { return $this->foo; } } $class = new TestClass('Hello'); echo $class; // 'Hello' 参考: http://www.php.net/manual/ja/language.oop5.magic.php#object.tostring
  • 22. Response オブジェクト ブラウザへの応答を制御 forge() で生成: Response::forge($body = null, $status = 200, $headers = array()) • $body: 本文 (string) • $status: HTTP ステータスコード • $headers: HTTP ヘッダ 参考: http://docs.fuelphp.com/classes/response.html
  • 23. Controller::before(), after() before() • コンストラクタのようなもの • action_*() の前に実行される • URL で指定された action_*() が存在しなくても 実行される after($response) • action_*() の後に実行される • URL で指定された action_*() が存在しないと 実行さない 参考: http://docs.fuelphp.com/general/controllers/base.html#/special_methods
  • 24. View • 基本は HTML • fuel/app/views/ に配置 • Controller から View::forge() で呼出し View::forge('ファイル名' [, View 変数]) e.g.) fuel/app/views/ hoge / fuga.php ↑ View::forge('hoge / fuga') 参考: http://docs.fuelphp.com/general/views.html
  • 25. View: 変数 Controller で値をセット • View::forge() の第2引数 $data = array('name' => 'sho'); return $view->forge('hoge', $data); • View::set() $view = View::forge('hoge'); $view->set('name', 'sho'); // or $view->name = 'sho' return $view; View で出力 (※自動で HTML エスケープ) <?php echo $name; ?> 参考: http://docs.fuelphp.com/general/views.html
  • 26. View: src=“〜”, href=“〜” の path • Asset::css(), js(), img(), Html::anchor() <?php echo Asset::css('bootstrap.css'); ?> ↓ <link type="text/css" rel="stylesheet" href="http://example.jp/fuel/public/assets/css/bootstrap.css?1341579 959" /> • Uri::base(false) index.php までの URL を返す <a href=“<?php echo Uri::base(false); ?>welcome/hello”>… 参考: http://docs.fuelphp.com/classes/uri.html
  • 27. Model • クラス名は Model_Hoge • ¥Fuel¥core¥ Model クラスを継承 • fuel/app/classes/model/ に配置 • Controller から new で生成 (ロード不要) $hoge = new Model_Hoge(); 基底クラスの定義: fuel/core/classes/model.php class Model {} 参考: http://docs.fuelphp.com/general/models.html
  • 28. Query Builder SQL クエリを生成 e.g.) $query = DB::select() ->from('members') ->where('member_id', '>=', 2) ->order_by('member_id', 'asc'); $result = $query->execute()->as_array(); ↓ SELECT * FROM `members` WHERE `member_id` >= 2 ORDER BY `member_id` ASC; 参考: http://docs.fuelphp.com/classes/database/qb.html
  • 29. Model_Crud DB の CRUD 操作を行うメソッドが予め実装 find_by_pk() 主キーを指定して一行取得 find_all() 全行取得 find() 条件に一致する行を全行取得 save() 保存 (update / insert) delete() 削除 : 参考: http://docs.fuelphp.com/classes/model_crud/methods.html
  • 30. Model_Crud: 使用例 members テーブル member_id int(), PK, AI name varchar(20) votes int() Model の定義 fuel/core/classes/model/member.php class Model_Member extends Model_Crud { protected static $_table_name = 'members'; protected static $_primary_key = 'member_id'; } 参考: http://docs.fuelphp.com/classes/model_crud/introduction.html
  • 31. Model_Crud: 使用例 e.g.) データ挿入 fuel/core/classes/controller/akb.php $member = new Model_Member(); $member->name = '大島 優子'; $member->votes = 108837; $member->save(); $member = new Model_Member(); // 新しい行 $member->name = '渡辺 麻友'; $member->votes = 72574; $member->save(); member_id name votes 1 大島 優子 108,837 2 渡辺 麻友 72,574
  • 32. Model_Crud: 使用例 e.g.) データ更新 fuel/core/classes/controller/akb.php $member = Model_Member::find_by_pk(13); $member->votes += 100000; $member->save(); id name votes id name votes 1 大島 優子 108,837 1 大島 優子 108,837 2 渡辺 麻友 72,574 2 渡辺 麻友 72,574 : → : 13 北原 里英 26,531 13 北原 里英 126,531 : :
  • 34. 様々なライブラリ Validation Class • ユーザ入力の正当性を検証 • @wakuworks さんのセッションに期待! Security Class • CSRF 対策など Pagination Class • ページ送り etc.
  • 35. Profiling 実行結果を分析して表示 fuel/app/config/config.php 'profiling' => true, 参考: http://docs.fuelphp.com/general/profiling.html
  • 36. Controller_Rest クラス RESTful のサポート • Controller_Rest クラスを継承 • HTTP メソッドによって切替 • GET,POST,PUT,DELETE function <HTTP メソッド名>_<アクション名>() • 指定されたフォーマットで出力 • xml, json, csv, html, php, serialize http://〜/〜/<コントローラ名>.<フォーマット> 参考: http://docs.fuelphp.com/general/controllers/rest.html
  • 37. Controller_Rest クラス fuel/app/classes/controller/test.php e.g.) class Controller_Test extends Controller_Rest { public function get_member($member_id) { $this->response(array( 'member_id' => 13, 'name' => '北原 里英', 'votes' => 26531 )); } } ↓ http://example.jp/fuel/public/ test/member/13.json {"member_id":13,"name":"¥u5317¥u539f ¥u91cc¥u82f1","votes":26531}
  • 38. 参考情報 FuelPHP まとめ Wiki http://fuelphp.phpfogapp.com/wiki/ 参考書籍