ラベル FuelPHP の投稿を表示しています。 すべての投稿を表示
ラベル FuelPHP の投稿を表示しています。 すべての投稿を表示

2015年12月7日月曜日

FuelPHPを快適に開発するためのNetBeansで設定まとめ

このブログはFuelPHP Advent Calendar 2015の7日目です。

昨日は@wataさんの「DBUnit拡張を使ったFuelPHPのテストを考える」でした。
今日はみんな大好きNetBeansの話します。
それでは早速行きましょう。

まずはNetBeansのダウンロードリンクです。

あなたとNetBeans、今すぐダウンロード


普段IDEを使ってない!って人はこちらも合わせてどうぞ。

PHPerがNetBeansを使いたくなる7つの理由


インストールが済んだら本題です。

1. ルーク、FuelPHPプラグインを使え!!

兎にも角にもまず入れるのはこれです。
@junichi_11さんが作っているこのプラグインを使いましょう。
@junichi_11さんがまとめてるブログはこちらです。

NetBeansではじめる FuelPHP


このプラグインを使うとNetBeans上からスケルトンを作ったり、正しくFuelPHPの補完や関数ジャンプ出来るようになります。
Coreのコードを読んだり、知らないメソッドを知るきっかけにもなるので是非ご利用ください。
僕がPHPStormに完全に移行出来ない理由はこのプラグインがあるからと言っても過言ではありません。
Symfony2書く時とかはもう完全にPHPStormなんですけどね。
完全無料環境なのでお財布に優しいです!!

2. その他の設定


■Windowsの人は必須


  • Show and change line ending
  • Change Line Ending on Save


Show and change line endingは改行コードをLFにしたり今の改行コードを表示したりします。
Change Line Ending on Saveはデフォルトの改行コードを指定して保存するときに一括して改行コードを変更して保存してくれます。
私はLF固定にしてます。
あとはここからはお好みですが私はvagrantプラグインを入れてNetBeans上からを操作できるようにしてます。
vagrantを操作するためだけにターミナルを開かなくていいので便利です。
更にwindowsはsshクライアントがデフォルトで入っていませんがvagrantへのsshは出来るようになります。
gitからvagrantの使い方まで知りたい!って人は@kenji_sさんの本を読むと全部書いてあります。



PHPUnitなどの設定はお好みでどうぞ。
個人的にはPHPUnitのバージョンにテストコードが依存することがあるのでvagrant側で実行する事多いです。
プロジェクトが一つでチームで同じバージョンを共有できる場合などはインストールしてIDE上で実行する方が便利だと思います。

3. インデントの乱れは心の乱れ

PSR-2に準拠しないとプルリクエスト送った時に怒られます(自分は怒られた事がある)
なのでフォーマットを指定しましょう。


  1. ツール→オプション→エディタ→フォーマット
  2. 言語を「PHP」
  3. カテゴリを「中括弧」
  4. クラス宣言とメソッド宣言を「改行」に変更




ちなみにPSR-2準拠だとインデントはタブでは無くスペース4つです。
そしてPHPの予約語は小文字で使用しなければなりません。
つまりNULLはnullです。
デフォルトは大文字なので変更が必要です。
やり方はNetBeansの設定ファイルを直接編集します。
Windowsでエディタで編集する場合は管理者権限が必要ですのでご注意ください。

  \インストールフォルダ\php\phpstubs\phpruntime\Core.php

私はデフォルトの場所にインストールしたので

  C:\Program Files\NetBeans 8.0.1\php\phpstubs\phpruntime\Core.php

です。
それを次の通り編集します。

define ('TRUE', true);
define ('FALSE', false);
define ('ZEND_THREAD_SAFE', false);
define ('ZEND_DEBUG_BUILD', false);
define ('NULL', null);

↓↓↓

define ('true', true);
define ('false', false);
define ('ZEND_THREAD_SAFE', false);
define ('ZEND_DEBUG_BUILD', false);
define ('null', null);

これで補完もバッチシです。


以上を設定すればプロジェクト作成時からFuelPHPの対応が完璧になったはずです。
快適なプログラミングライフをお楽しみください。

明日のFuelPHP Advent Calendar 2015@tanaka8comさんです。
楽しみですね!!

2014年9月24日水曜日

FuelPHPで始めるモダンPHP開発!!

9/20にサテライトキャンパスひろしまで開催されたオープンソースカンファレンス2014@広島に参加して来ました。

Twitter まとめ:オープンソースカンファレンス2014 Hiroshima


今年で4回目となり、毎年スタッフとして参加してますので今年も迷うこと無く参加しました。
その中で今年は

FuelPHPで始めるモダンPHP開発!!


とPostgreSQLでは無く、FuelPHPユーザ会として参加してきました。
(勿論、PostgreSQLユーザ会としてブースではベンチマークの発表とかしてましたよ)
で当日の資料はこちらです。



資料としては

今からFuelPHPを使う人が知るべき5つのこと+1


の下にあるスライドをリメイクしました。
このページが未だに僕のブログではそこそこアクセスがあります。
ですので需要があると思い、書き直しました。
またFuelPHPを始めたい人は下記のリンクも参考になると思います。




半分以上の時間はデモだったのですが参加して下さった方にインパクトは与えられたでしょうか?
一番反響というか会場がざわめいたのは



だったのが意外でしたw
Profilerは知ってると結構便利なのですが特に説明しているサイトも少なく知らない人も多いのかもしれません。
僕としてはIDEやvagrantの方が反響が大きいと思ったのですが


  • 使ってる人からすると普通
  • 使ってない(知らない人)からするとよくわからない


状態だったのかも知れません。
それに対してProfilerはわかりやすいし簡単に表示出来るのでインパクトがあったのかもしれませんね。
あと会場で「おぉ!」って言われると気持ちいい事がわかりました←
またセッションは強豪ひしめく最終枠だったのですが20人以上の方に来ていただきました。
やはりと言うかPHPを仕事にしてる人が多いのでまだまだPHPフレームワークや開発手法については需要がありますね。
なので機会があれば今後もこういった情報をシェアして行こうと思います。

といことで今年もとても楽しいOSCでした。
今年はスタッフに学生が多く、今後の広島のイベントも楽しみですね!!
来年も開催される事が決定されているので来年も楽しみにしたいと思います。

2014年9月9日火曜日

2014年版 WEB系の開発をするために必要な10の開発環境 ~Windows~

ずっと使ってたZenBookのマザーボードが亡くなられ、初期化されました。
なのでこれを機に開発環境を見直しました。
2年前のまとめはこちら

WEB系の開発をするために必要な10の開発環境 ~Windows~



この頃からはツールも変わったモノもありますしそのままのモノもあります。
ですが必要な項目は依然変わってないと思いますので項目は踏襲します。



1 IME

前回はGoogle日本語入力をオススメしました。
この二年で更に使いやすくなり、もうGoogle日本語入力無しでは生きていけませんw
便利な機能として

郵便番号を入れると住所に変わる
「きょう」→2014/09/06のように日付に変換できる(ことし、あさって等でも可)
「くりえいと」→Createのように英単語の読みで英語に変換してくれる

などです。
顔文字やZ+Hでの矢印なども便利ですね!
AndroidやMacOSなどでも同じ変換が出来るのでマルチプラットフォームでストレス無く使く入力出来るのは嬉しいですね!!
また、流行りの語句なども変換してくれるのが非常に助かります。


2 ブラウザ

ブラウザ事情もIE・Firefox・Google Chromeの3強状態は変わらず。
ただChromeの開発者ツールが一番使いやすいと思うので開発はChromeメインにしてます。
Chromeの開発者ツールの使い方はドットインストールがわかりやすいのでオススメです。

Chrome Developer Tools入門 (全10回)


FirefoxもIEも開発者ツールは付いてるのでブラウザ依存の不具合とぶつかった時などに使えると色んな時に役に立つので調べておいて損は無いですよ。

3 テキストエディタ

僕は今も昔もIDE派です。
でも時々ちょっとconf触ったり、メモ作ったり、直接HTML触ったりするときなどテキストエディタは必要です。
そこで僕が使ってるのはSakuraEditor
矩形選択も置換も使いやすいのでログを見たり集計するときにも役立ちます。
また常駐アプリとしてついてくる機能のgrepが非常に便利です。
Windowsだとソース内のキーワードでgrepしたい時とか困るんですよね。
それがバッチシ対応してくれるし、対応箇所も一覧で出してくれるので非常に使いやすいです。
また補完は辞書のパッケージを追加すれば対応してくれます。
PHPをちょっと書く程度なら十分ですよ!
そしてそんなSakuraEditorの対抗馬なのがSublime Text 3ですね。
UTF-8の環境で使うなら補完、拡張性、どれをとってもSakuraEditor以上のパワーです。
実際に僕はWinSCP(後述)のデフォルトエディタはSublime Text 3をデフォルトにしてます。
一括置換も便利ですしテキストエディタ界の中心的存在です。
長い間、秀丸エディタが築いてきた牙城を崩す存在ですね。
Sublime Textについてはいい本が出てます。



電子書籍版もあるのでSublime Textを始める人は一度読んだ方がいいですよ!!

4 IDE

昔はEclipseを使ってましたが今はすっかりNetBeans使いです。

PHPerがNetBeansを使いたくなる7つの理由


特にFuelPHP使ってる人にはNetBeansが超絶オススメですね。
使い方は上のリンクでも紹介してますが補完もバリバリ聞くしHTMLやJSもバッチシ対応です。
ユニットテストも宣言元にジャンプもデバッカもバッチシです。
var_dump開発しなくて済むとすごい効率が上がりますよ!
ただ最近、Symfony2の時にNetBeansの非力さを感じる時があります。
Symfony2使うとすっごい最初のロードが長いんですよね(´・ω・`)
そんな人には有料ですがPHPStormがオススメです!!
Web系の補完も抜群でNetBeansより軽快です。
Symfony2やCakePHPなどのフレームワークで開発する人やJSもバリバリ書くようなフロント寄りの人は買ったことによるメリットが間違いなく大きいです。
お試し無料期間もあるのでまずは触ってみるのがいいのではないでしょうか。
あと何かと面白いイベントしてることがあるので@samuraismウォッチするのがオススメです。
それと




らしいのでセール待ちせずにサクッと買ったほうが良いと思います。
ツイッターのレスポンスとかメール対応がすごく優しく日本人にも安心対応なのも良いところですね。

5 ローカル実行環境

PHPer御用達はやっぱりXAMPPが主流だと思います。
ですが開発プロジェクトが増えるたびに度重なるバーチャルホスト。
そしてPHPやその他のライブラリのバージョンがプロジェクトごとに違って繰り出されるエラー。
そんな経験皆さんありませんか?
それを解決するにはVMです。
僕は以前からVirtualBoxを使っています。
VirtualBoxはお手軽にWindows上にVMを建てれるので簡単です。
ですがOSのインストールからやらねばならず、ネットワークの設定等のインフラ系の知識も必要とします。
たまになら良いのですが頻繁に、しかも「今すぐ開発を始めたい!」という時には高いハードルになってしまいます。
そこで活躍するのがvagrantです。
vagrantはVMのラッパーとパッケージ化を同時に提供してくれます。
ViretualBox, VMWare, AWSなどのVMに対応しており、高速にかつシンプルにVMを作成できます。
そしてVMへのアクセス、管理、設定も簡略化してくれます。
これにより、開発環境の依存関係に悩まされることなく、そして多くのインフラ系知識のブラッシュアップも必要なく開発に集中できます。
しかもNetBeansにプラグインを入れるとvagrantをNetBeansのGUIで操作できます。
SSHもCygwinのような黒魔術を使うこと無くNetBeansからアクセスできます。
すべてがNetBeansで解決できるので作業が捗ること間違いなしです!!

6 RDB

vagrantの出現によりlocalにDBを入れることがなくなりました。
これによりlocalにアパッチやDBを入れないので開発しない時に無駄なプロセスが起動しなくなりました。
こういうところにもVMを使うと良い点がありますね。

7 DB管理ツール&SQLエディタ

SQLエディタは自分の中ではA5:SQL Mk-2が一強です。
前回ご紹介した時はまだSSHトンネルも無く、PostgreSQLにアクセスするにはドライバーが必要でした。
現状ではSSHトンネルが可能なのでセキュアに接続できますしvagrantへのアクセスも簡単です。
またドライバーが必要ないのでダウンロードして解凍したらすぐに使うことができます。
このお手軽さにプラスして各種機能が非常に強力です。
特にテーブル定義書の出力とER図のリバース自動生成はいつも助けられています。
DBにもマルチ対応なのでMySQLとPostgreSQLでツールを変える必要がないのも非常に助かります。
ただしDB管理ツールではないのでDDLの必要な作業はGUI上ではできません。
(SQLを発行すれば当然出来る)
そこで外部制約やテーブル設計時に強力なのがMySQLならMySQL Workbench、PostgreSQLならpgadmin3です。
DBAツールなので簡単にテーブルの作成や編集もできますし外部制約やDB固有の機能にもバッチリサポートしてます。
それぞれグラフィカルな実行計画の結果やレプリケーションの設定、confの変更なども可能です。
phpMyAdminやphpPgAdminを覚えるよりセキュアで断然便利なので是非活用してみてください。

8 ファイル転送ツール

今はもうWinSCP一強です。
SCPの管理の使いやすさもですが自動同期の機能や開くファイルのエディタの指定など細かく手が届いて便利です。
地味にシンボリックリンクを作れたりパーミッションを変更できたりするのでCGIが苦手な人でも大丈夫です。
更にノートン コマンダー インターフェイスを使うとキーボードでの操作に特化するそうです。
僕もこれから効率向上のために試してみようと思ってます。

9 バージョン管理ツール

こちらもSVNから完全にGitに移行しました。
NetBeansからGitは直接管理できるので基本的にはNetBeansのGUIで触ってます。
しかもNetBeansは自分自身の保存ログとGitのコミットログを使ってソースのDiff出せたりするので超絶便利です。
マジこれだけでもNetBeans使う価値あります。
でもなんでもかんでもNetBeansのプロジェクトに出来るわけではないと思います。
そんな時はSourceTreeがイケてます。
GUIで操作でき、Githubへの連携も最初から念頭に置かれています。
ちなみにプライベートな開発をするときは僕はbitbucketを使ってます。
プライベートリポジトリでも無料なのでちょっとした開発の時は便利ですよ。
また社内で「クラウドにデータを置くのはちょっと…」って時にサーバーを社内に建てることになったらgitbucketがgithubのクローンの中でもダントツオススメです。
Scalaで作られてますが日本人が作者なので情報も多く、環境構築、アップデートともにすごく簡単です。
実際に僕も社内で使ってますがGUIでリポジトリが管理できることはもちろん、プルリクエストとissuesによるチケット管理はすごく便利です。
またWikiやREAD.MEなども対応しており、プロジェクトの暗黙知を無くすプラットフォームが成熟している感じです。
個人的には開発者だけで回すならredmine無しでgitbucketでやりとりしたほうがうまく回る気がしてます。

10 SSHクライアント

最近はTeraTerm proを使ってます。
Tera Term Menuを使うとTera Termのアクセスするサーバの管理もできます。
実際にはvagrantを使い出すとSSHを使うことも減ってきました。
昔はサーバに入ってvimでゴリゴリすることもあったのですがそういう時はWinSCPでは入ります。
なのでほとんどのことは別のツールでことが足りるのですがやはりコマンドラインが必要なこともあります。
昔はPuTTYを使ってたのですがPuTTYもかなり良いので好みの問題かなと思います。


と言うことでVMが出てきたことで環境依存の悩みも無くまりました。
またここでは説明しませんでしたがPHPUnitやBehatなどでテストが充実し、デバッカを使う機会も減りました。
この様に環境がどんどん進化してますのでぜひ一度調べてみると良いと思います。
また今回の内容でPHPerの最新環境に興味が出た人は次の本が参考になります。


また2014/9/20に広島市でオープンソースカンファレンス広島が開催されます。
ここにFuelPHPユーザ会として参加します。
ブースも出しますし登壇もしますので興味がある方は是非遊びに来てください!!

FuelPHPで始めるモダンPHP開発!!


ということでWeb系の方はこれを機に環境を見なおしてみると良いかもしれません。

2014年5月8日木曜日

FuelPHPでセキュアな設定をする

FuelPHPをお仕事で使う方も増えてきたと思います。
そんな中で気になるのはやはりセキュリティ。
ということで今日はFuelPHPでセキュアな状態にするための設定を書きます。
まず

@kenji_sさんの下記のブログが非常に分かりやすく書かれています。
今日はこれ以外の下記の項目について書きます。

  1. DBにセッションを保存
  2. 変更推奨のセッション情報
  3. https時にCookieにsecure属性を付与

1.DBにセッションを保存

defaultはセッションをクッキーに保存しています。
これをDBに変える情報は公式ドキュメントにあります。

FuelPHP公式ドキュメント 1.7

DB以外にも

  • File
  • Memcached
  • Redis

などが選べます。
DBを使う際にMySQLの方はいいのですがPostgreSQLを使う方は

#reate the sessions table
$ php oil r session:create

が動きません。
なのでCREATE文と設定方法をご紹介します。

まず

fuel/core/config/session.php



fuel/app/config/session.php

にコピーします。
次に fuel/app/config/session.php のdriverの項目でdbを指定します。

'driver'  => 'db',
次にdbにセッション専用のテーブルを作成します。
下記SQLで作成できます。

--PostgreSQL用
CREATE TABLE sessions
(
session_id character varying(40) NOT NULL,
previous_id character varying(40) NOT NULL,
user_agent text NOT NULL,
ip_hash character varying(32) NOT NULL DEFAULT ''::character varying,
created integer NOT NULL DEFAULT 0,
updated integer NOT NULL DEFAULT 0,
payload text NOT NULL,
CONSTRAINT sessions_pkey PRIMARY KEY (session_id),
CONSTRAINT sessions_payload_key UNIQUE (payload)
)
WITH (
OIDS=FALSE
);
ALTER TABLE sessions
OWNER TO ユーザ名;

これでセッションをDBに保存するようになります。

2.セッション時間の変更

セッション利用する際に変更推奨の項目です。
1.でcopyしてきた

fuel/app/config/session.php

の項目に

//セッションIDを保存するCookie名
cookie_name

があります。
こちらはdefaultの名前ではFuelPHPのどのdriverを使ってるかがわかります。
セキュアな環境を求められる際は変更した方が良いと思います。
似たような設定にCSRF対策時に利用するkey名があります。
こちらは

app/config/config.php

のSecurityの項目の

csrf_token_key

の項目で変更できます。

それ以外にもsession.phpには

  • expiration_time
  • rotation_time
  • match_ip
  • match_ua

などセキュアにセッションを扱うための設定があります。
defaultはゆるく設定されていますので要件に合わせて設定を変更すると良いと思います。

3.https時にCookieにsecure属性を付与

httpsの際にCookieにsecure属性をつけていないと盗聴される可能性があります。

PHP と Web アプリケーションのセキュリティについてのメモ

Cookie の secure 属性


セキュリテイについては安定の徳丸さんの記事を御覧ください。

徳丸浩の日記

HTTPSを使ってもCookieの改変は防げないことを実験で試してみた


FuelPHPはdefaultでは付与していません。
ですが設定一つで対応できます。
設定箇所は

fuel/app/config/config.php

'cookie' => array()

を有効にし

'secure' => false,



'secure' => true,

と変更します。
これでsecure属性を付与してくれます。
ただし、secure属性は

  • https通信時のみ Cookie の内容を送信
  • http通信時には Cookie の内容を送らない

というものですのでhttpでアクセスした際はCookieの内容を送信しません。
ですのでhttp通信時はセッションの保持もCSRFも正常に動作しません。
(本版環境はhttpsだけど開発環境はhttpの場合などでハマるポイントですね)

以上の3点が本番リリース時に気にする項目だと思います。
FuelPHPとは関係ないですがヘッダー情報でphpとapacheのバージョン情報が分かります。
こちらはapacheのhttpd.confやphp.iniを修正する必要があります。

■apacheの場合
・対象File
CentOS:/etc/httpd/httpd.conf
ubuntu:/etc/apache2/conf-enabled/security.conf

・変更箇所
ServerTokens Prod
ServerSignature Off

■PHPの場合
・対象File
php.ini

・変更箇所
expose_php = Off

となります。
上記と合わせて設定をご検討していただけたらと思います。


ということでFuelPHPのconfigは色々と設定出来るので一読すると面白いと思いますよ!!

2013年12月13日金曜日

FuelPHP(TwitterBootstrap3)でJQueryのプラグインのdataTablesを使う

FuelPHP Advent Calendar 2013の13日目です。

昨日は@madmamorさんの

FuelPHPでChatWorkパッケージを使ってみる

でした。
私もチャットワークのAPIを利用できるようになったのでこの週末に早速試してみたいと思います。

それでは今日のお題ですがdataTablesです。
Webアプリを作るとき、業務系の管理画面を作るとき、FuelPHPの軽量さと作りやすさは強力です。
私もここ最近のWebアプリケーションはFuelPHPで作ることが大半ですね。
その中で特に管理画面を作るときはTwitterBootstrapは非常に便利です。
皆様も日頃お世話になっていますよね?
また今日ご紹介するdataTablesも強力なJqueryのプラグインです。
dataTablesはhtmlのテーブルタグを読み込み、ソートや検索を始め、多くの機能を提供します。
この2つを組み合わせることで表出力が簡単で便利になるのでご紹介します。

dataTables

日本語まとめwiki


TwitterBootstrapでdataTablesを使う

ただ、TwitterBootstrapもFuelPHP1.7で2から3に変わりました。
TwitterBootstrap3は2と互換性のない変更が多く、過去の資産が使いまわせません。


※TwitterBootstrap3用の書籍で非常にわかりやすかったのでオススメです

DataTablesも例に漏れず上記の方法では無理です。
TwitterBootstrap3のUIに合わせるのには公式サイト以外の方法が必要です。
とは言ってもすでに3用のプラグインが作成されています。
そこでdataTablesの簡単な使い方とTwitterBootstrap3のUIに合わせる方法をご紹介します。

まずは最新のソース・ファイルをFuelPHPに配置します。

GirHub dataTables

本体
https://github.com/DataTables/DataTables/blob/master/media/js/jquery.dataTables.js

Bootstrap用CSS
https://github.com/DataTables/Plugins/blob/master/integration/bootstrap/3/dataTables.bootstrap.css

Bootstrap用JS
https://github.com/DataTables/Plugins/blob/master/integration/bootstrap/3/dataTables.bootstrap.js

Bootstrap用image
https://github.com/DataTables/Plugins/tree/master/integration/bootstrap/images

これらをpublic/asset/のそれぞれに配置します。
ここで注意があります。
FuelPHPの画像を置く場所はデフォルトはimgです。
ですがCSSのファイルパスはimagesになっています。
これを下記のとおり変更します。
table.dataTable thead .sorting { background: url('../images/sort_both.png') no-repeat center right; }
table.dataTable thead .sorting_asc { background: url('../images/sort_asc.png') no-repeat center right; }
table.dataTable thead .sorting_desc { background: url('../images/sort_desc.png') no-repeat center right; }

//変更

table.dataTable thead .sorting { background: url('../img/sort_both.png') no-repeat center right; }
table.dataTable thead .sorting_asc { background: url('../img/sort_asc.png') no-repeat center right; }
table.dataTable thead .sorting_desc { background: url('../img/sort_desc.png') no-repeat center right; }


これでasset/imgに配置してもソート用の画像が読み込まれます。

あとはTableにIDを降って


var Table = $('#table_id').dataTable();

とすれば自動的に読み込んで整形してくれます。
これでよく要望に上がるソート・ページャー・サーチを一度に対応することが出来ます。
更によりBootstrapっぽくするには


var Table = $('#table_id').dataTable({
    //日本語対応したい場合はGithubのpluginから該当のファイルをダウンロードしてください
    oLanguage: {
        sUrl: "/assets/js/plugins/i18n/Japanese.lang"
    },
    //Table生成後に実行されます
    fnInitComplete: function() {
        $('#table_id').each(function() {
            var datatable = $(this);
            //サーチのinputタグをよりBootstrapUIよりに
            var search_input = datatable
                    .closest('.dataTables_wrapper')
                    .find('div[id$=_filter] input');
            search_input.attr('placeholder', 'Search')
                    .addClass('form-control input-sm');
            //表示列数の表示をよりBootstrapUIよりに
            var length_sel = datatable
                    .closest('.dataTables_wrapper')
                    .find('div[id$=_length] select');
            length_sel.addClass('form-control input-sm')
                    .change(function() {
                        oFC.fnRedrawLayout();
                    });
            oFC.fnRedrawLayout();
        });
    }
});

とするといい感じになります。
他にもdataTablesには多様な追加機能がpluginとして用意されています。
公式サイトは情報が古かったりするのでGitHubのサンプルのindex.htmlも参考にしてみてください。

さてFuelPHPの良いところ言えばRESTControllerですよね。
またdataTablesはデータをJSONで受け取ることが出来ます。
大きいdataでもAjaxでJSONを受けることができるので肥大したTableでも対応することが出来ます。
今日は13日の金曜日ですしJSONを使った例もご紹介します。

簡単な例ですと


var Table = $('#table_id').dataTable({
    //読み込み中の表示
    bProcessing: true,
    //dataを全て読み込む前に表示を始める
    bDeferRender: true,
    //読み込むJSONのURL(RESTControllerのURL)
    sAjaxSource: "/api/dataTables.json",
    //配列名(デフォルトはaadata)
    sAjaxDataProp: "setJson",
    //表示列とjsonの項目をマッピングします
            aoColumns: [
                { mData: "id", sDefaultContent: "" },
                { mData: "name", sDefaultContent: "" },
            ],
    oLanguage: {
        sUrl: "/assets/js/plugins/i18n/Japanese.lang"
    },
    fnInitComplete: function() {
        $('#table_id').each(function() {
            var datatable = $(this);
            //サーチのinputタグをよりBootstrapUIよりに
            var search_input = datatable
                    .closest('.dataTables_wrapper')
                    .find('div[id$=_filter] input');
            search_input.attr('placeholder', 'Search')
                    .addClass('form-control input-sm');
            //表示列数の表示をよりBootstrapUIよりに
            var length_sel = datatable
                    .closest('.dataTables_wrapper')
                    .find('div[id$=_length] select');
            length_sel.addClass('form-control input-sm')
                    .change(function() {
                        oFC.fnRedrawLayout();
                    });
        });
    }
});

としてRESTControllerは


public function action_dataTables() {
        $aadata['setJson'][] = ['id'=>1, 'name'=>'hage'];
        $aadata['setJson'][] = ['id'=>1, 'name'=>'fuga'];
        return $this->response($aadata);    
    }
といった感じでいつもどおり配列を渡してJSONを生成するだけです。
htmlは次の通り
id name
とするとtbodyの内容をJSONを元に自動生成してくれます。
もちろん作りこみ次第で例の最初に全て読み込むのではなく、APIとViewが連携して適時やりとりすることが出来ます。
このAPI側が非常に簡単につくれるのはFuelPHPのメリットです。

以上のようにFuelPHPとdataTablesの相性は抜群です。
是非、公私でアプリ作成時に試して見てください!

それで引き続きFuelPHP Advent Calendar 2013をお楽しみください!!

2013年11月23日土曜日

【バグ報告】FuelPHP1.7のRESTControllerの挙動について

バグ見つけました。
前回の

【バグ報告】FuelPHP1.7でViewModelが二回実行される


につづいて1.7のバグです。
前回も今回も1.8Dev版で治っており、コミュニティには報告されているため1.7.1では改修されてリリースされます。

対象 FuelPHP1.7(2013/11/23現在)

現象としてはURLで

/method.json

とアクセスするとJSONが本来吐かれますがこれを

/method

等の拡張子を指定せずに

HEADERS Accept text/html

の時には $response->body() の中がArrayになります。
具体的には直接拡張子をブラウザでアクセスした場合に発生します。
が本来はStringを期待してるのにArrayが来るのでエラーになります。
つまり結論から言うとFuelPHPのRESTControllerはHTMLの拡張子の実装はされていません。
ドキュメントには「シンプルなテーブルタグを吐き出す」となっていますが元々var_dumpしているだけでした。
これが1.7でvar_dumpすらせずにエラーになっていました。

対策としてはHTMLの実装が無いので必要なければ

/classes/controller/rest.php

--- a/classes/controller/rest.php 
+++ b/classes/controller/rest.php 
@@ -55,7 +55,7 @@ abstract class Controller_Rest extends \Controller 
        'jsonp'=> 'text/javascript', 
        'serialized' => 'application/vnd.php.serialized', 
        'php' => 'text/plain', 
-       'html' => 'text/html', 
+     //'html' => 'text/html', 
        'csv' => 'application/csv', 
    );   

'html' => 'text/html', をコメントアウト

と修正するのがいいと思います
今回はfuelphp_jpのMLに投稿してみました。
詳しい情報としてはこちら。

1.7のRESTControllerの挙動について(ML)

今回はMLに投稿してみました。
1.7.1や1.8の修正としては

  • HTMLはvar_dumpを実行すると言う仕様で統一する
  • ドキュメントはそのように修正する

という方針になったようです。
Githubのプルリクは英語必須でGitやGithubの使い方を覚えなきゃいけないのでハードルが高いと思います。
(まぁ間違ってたりしたらコメントくれてプルリク弾かれるだけなので気にせずガンガン練習がてらプルリク投げてもいい気もしますが)
ですがMLは日本語だしレスポンスも割と早いのでバグだったり質問は気軽に投げてみたらいいと思います。
僕も今回は優しく対応していただきました^^
と言うことでバグを見つけたらMLで報告。
バグかな?って思ったらMLを見てみる。
こんな流れで地雷を上手くさけて行ける気がしました。
と言うことでみなさんも是非ご参加ください!

FuelPHPの日本語グーグルグループ

  

2013年10月25日金曜日

【バグ報告】FuelPHP1.7でViewModelが二回実行される

FuelPHP1.7出たので早速使ってみて早速バグを踏みました。
皆さんには同じ悲しみを抱いて欲しくないので情報共有しておきます。


対象 FuelPHP1.7(2013/10/25現在 俺の誕生日

■現象
上記のバージョンのFuelPHPのViewModelが2度実行されると言うものです
例えば現象として

  • ViewModel中でInsertすると二個データが入る
  • ViewModel中でValidation::forge();などを呼ぶと二度目の呼び出しでerrorが発生する

などが発生します。
こちらについてはfuelphp_jpのMLでも話題になってました。

1.7 の viewmodel の挙動について - Google Groups


対策は public/index.php の75行目あたりに以下のとおり

// Render the output
$response->body((string) $response->body());

を追記してください。
また下記のリンクも参考になります

Github

こちらは1,6や1.8/developでは修正されています。
該当のバグに出会ったときはバージョンを帰るか上記のとおり、ソースを修正してみてください。

2013年9月9日月曜日

FuelPHPのクエリビルダを使いこなす

皆さん、FuelPHPしてますか?
今日はFuelPHPの多機能の中でもクエリビルダに注目してまとめます。

※下記の記載の実行環境は以下のとおりです(2013年9月9日現在
  • PHP5.5.3
  • PostgreSQL9.2.
  • FuelPHP1.6
まずクエリビルダですが公式ドキュメントはこちら

Database 使い方

基本的な使い方はこちらのブログが非常にわかりやすいです。

FuelPHPのクエリビルダを表にまとめた


さて、これだけ見れば単純なQueryについては十分使いこなせると思います。
ただ公式にも書いてなかったのですがWHERE句に関してはこれだけではありません。

$query->where('column_name_1', 'hoge');
$query->where('column_name_2', '>', 1);

//下記は同じSQLが発行される
$column_list = array(
    'column_name_1' => 'hoge',
    'column_name_2' => array('>' => 1),
);
$query->where($column_list);

//5.4以降だと配列が簡潔に
$column_list = [
    'column_name_1' => 'hoge',
    'column_name_2' => ['>' => 1],
];
$query->where($column_list);

と出来ます。
where()に直接配列を渡して実行できるわけです。
値の有無をチェックしたりループを回したりしながら何度もwhere()を呼ぶ必要はありません。
これは非常に使える場面が多いです。
それとバインディングもサポートしてます。

//公式
$query = DB::query("SELECT * FROM users WHERE username = :name")->param('name', 'value')->execute();
//param('name', 'value')→param(':name', 'value')でも動く
$query = DB::query("SELECT * FROM users WHERE username = :name")->param(':name', 'value')->execute();
//クエリビルダは':name'なら動く
>where(':name','value')->param(':name', 'value')->execute();

DB::queryを使う時はエスケープしてくれるのでこちらを使いましょう。
配列も

//公式
$query = DB::query("SELECT * FROM users WHERE username in :name")->param('name', ['hoge','fuga'])->execute();
//SELECT * FROM users WHERE username in ('hoge','fuga') ←生成Query

としてくれます。
しかしクエリビルダ自体がSQLの機能をすべて網羅しているわけではありません。
そのため難しいQueryが必要の際につまづきます。
そうなると上記のようにDB::query()とバインディングで直接SQLを記述することが多いと思います。
それだとwhere()のように柔軟にWHERE句を付け替えるのは難しくなります。
そして結果的にソースが煩雑になりがちです。
そこでこちらのブログが参考になります。

QueryBuilderで小難しいSELECT文を書くためのノウハウ #FuelPHPAdvent2012 - Dazing days

ただこちらで4.where句の右辺にMySQL関数を使いたい時のノウハウに

//  WHERE DATE(r.`rental_dttm`) >= ADDDATE( CURDATE(), INTERVAL -30 DAY ) = '1' ←生成Query
$query->where('DATE(r."rental_dttm") >= ADDDATE( CURDATE(), INTERVAL -30 DAY )', '=', true);

とあります。
これは素直に

//  WHERE DATE(r.`rental_dttm`) >= ADDDATE( CURDATE(), INTERVAL -30 DAY ) ←生成Query
$query->where('DATE(r."rental_dttm")', '>=', DB::expr("ADDDATE( CURDATE(), INTERVAL -30 DAY )"));
で問題ありません。
実際に実行されるQueryが想定通りのSimpleな形になるので運用者がクエリログを見た時も安心です。
それと生成したクエリは

$query = DB::query("SELECT * FROM users WHERE username = :name")->param(':name', 'value');
var_dump($query->compile());

で確認することが出来ます。
上記の例だと出力された:nameが'value'に置き換わって出力されます。

と以上になりますがDB接続はアプリ開発に必須です。
セキュリティと利便性を上手くとってスムーズに開発していきたいですね。

---チラシの裏---
クエリビルダのソースを含めFuelPHPのCoreのDB周りのソースを読みました。
綺麗で非常に読みやすくいい勉強になりました。
OSSはドキュメントになっていない隠し機能があることが多いので興味がある方は是非読んでみてください。

2013年8月19日月曜日

FuelPHPを仕事で使うときに知っておくべき4つのこと

こちらでもあるとおり、先月から新しい職場で働いてます。
で弊社は自分が来たことをきっかけにFuelPHPを使っています。
元々弊社はPHPならSymphonyと言うフレームワークを使ってました。
Symphonyを使ってるなら海の向こうで流行っているlaravelも考えたのですがFuelPHPを使うことにしました。
と言うことでお仕事でFuelPHPを使っているので気付いたことをまとめておきたいと思います。
個々での情報はあるのですが纏めてあるものはまだまだ少ないですしね。
またプライベートでアプリを作った時のまとめはこちら。
今からFuelPHPを触ってみたい方は下記のリンクを見るのをおすすめします。

今からFuelPHPを使う人が知るべき5つのこと+1


//2014/05/08に別記事書いたのでこちらも参考にどうぞ。

FuelPHPでセキュアな設定をする



実際に仕事でFuelPHPを使っていると「後々のことを考えるとここはキッチリしたい」って場面が沢山あると思います。
そういうところを疎かにすると負の遺産になります。
もちろん、FuelPHPはそんな時の答えをちゃんと用意してくれています。

1 環境設定による設定値の切り替え

お仕事で開発するとなると
  • テスト環境
  • 開発環境
  • ステージング環境
  • 本番環境
が用意されてますよね?
(実際はテスト環境すら無いことあるけどね...)
では実際にこれらの環境に合わせてDBであったり、特定の環境変数を切り替えたい場面は多々あります。
これらの設定をFuelPHPは分けることが出来ます。

公式ドキュメント(環境)

こちらの引用ですが
環境の設定は、サーバ変数 FUEL_ENV をセットするか、 手動で fuel/app/bootstrap.php 内の設定を変更することで設定します。 
で切り替えることができます。
つまり、Apacheのサーバ変数を設定しておけば、テスト環境で本番DBを更新するなどの問題を防ぐ事ができます。
bootstrap.phpを編集する場合は以下のとおりに

/**
 * Your environment.  Can be set to any of the following:
 *
 * Fuel::DEVELOPMENT
 * Fuel::TEST
 * Fuel::STAGING
 * Fuel::PRODUCTION
 */
Fuel::$env = (isset($_SERVER['FUEL_ENV']) ? $_SERVER['FUEL_ENV'] : Fuel::DEVELOPMENT);


DEVELOPMENTの部分を変えることで切り替わります。
読み込み先の対象ファイルは

app/config/[環境別ディレクトリ]/

となります。
また環境変数が本番環境のPRODUCTIONの時とそれ以外ではerror時(例外をcatchしてない時など)の表示が違います。
具体的にはDEVELOPMENT等では該当の箇所のソースが表示されます。
PRODUCTIONにしておけばエラーページを表示してくれます。
ですがFuelPHPのデフォルトではエラー表示はONになっています。

public/index.php

の先頭にある

error_reporting(-1);
ini_set('display_errors', 1);

を下記の通りに変更します。

error_reporting(0);
ini_set('display_errors', 0);

これで本番環境時にはPHPのエラーが表示されることはありません。
また1.6以上であればエラーが発生した場合はデフォルトで

fuel/app/logs/

にエラーが出力されます。
これは日別にログがローテートされてます。
ですのでこちらを監視することで色んな問題を解決することが出来ます。

またセキュリティのことに関しては下記のリンク先が素晴らしいです。
こちらを是非とも一読ください。

FuelPHP でのセキュリティ対策(3) - A Day in Serenity @ kenjis


2 複数DBへの接続

一つの環境で複数のDBに接続することは多々あります。
こちらの方法ですがまず

fuel/app/config/development(各自の環境変数に合わせてください)/db.php

に下記の通りhogeのグループを追加します。
※例はPostgreSQLにつなぐ場合です

return array(
    'active' => 'default',
    'default' => array(
        'identifier' => '"',
        'connection' => array(
            'dsn' => 'pgsql:host=localhost;dbname=default_db',
            'username' => 'default_user',
            'password' => 'default_password',
            'encoding' => 'utf8',
        ),
    ),
    'hoge' => array(
        'identifier' => '"',
        'connection' => array(
            'dsn' => 'pgsql:host=192.168.1.1;dbname=hogehoge',
            'username' => 'hoge',
            'password' => 'm9(^w^)',
            'encoding' => 'utf8',
        ),
    ),
);

これでdefault以外のhogeの接続情報が入りました。
あとは実際に呼び出す際に

//default
DB::query('SELECT * FROM test')->execute();
//hoge
DB::query('SELECT * FROM test')->execute('hoge');

となります。
指定しない場合はdefaultが呼ばれますが当然defaultを呼ぶことも出来ます。
ですので

DB::query('SELECT * FROM test')->execute($db_name);

として呼び出し先を動的に変えることも出来ます。

3 オリジナルのconfファイルの作成と読み込み

公式ドキュメント(configクラス)

またこちらのリンク先が丁寧に解説してあります。

FuelPHPでオリジナルconfigファイルの作成

こちらを設定することで
Config::get('hoge')
と取ってくることが出来ます。
私はalways_loadを設定して常に呼び出せるようにしています。


4 メタプログラミング

PHPでもメタプログラミングは出来ます。
特にFuelPHPではオートローダー機能の恩恵でよりシンプルに行えます。
※FuelPHPのクラスの自動読み込みについてはこちらを参考にどうぞ

例えばPHPは

//三項演算子(hogeの時にmodel_hogeを代入し、それ以外はmodel_fuga)
$class_name = ($model_name == 'hoge') ? 'model_hoge' : 'model_fuga';
//インスタンス化
$model = new $class_name();
$result = $model->method();
//静的呼び出し
$result = $class_name::method();

と出来ます。
例ではクラス名が$model_nameの中身に合わせて'model_hoge'と'model_fuga'で切り替わります。
この場合、呼び出しのクラスが読み込まれている必要があるため

require_once 'hoge.php';
require_once 'fuga.php';

と両方のファイルを読み込むコードが必要になります。
(または色んなクラスが書かれた巨大なファイルを作る必要があります。)
ですがFuelPHPはクラスの読み込み時に命名規則に合わせて動的にクラスファイルを読み込みます。
つまりrequire_once地獄や巨大なファイルと戦う必要がありません。
ですのでコードを足す度に上記のようにrequire_onceを書く必要がありません。
DBの値からクラスを動的に呼び出す場合などは新たにクラスファイルを作成するだけです。
このようにPHPの可変関数は非常にシンプルで強力です。
さらに__callなどのマジックメソッドを使えば多くの事が出来ます。
ただし、メタプログラミングはやり過ぎると作成者以外が分かりにくくなるのでケース・バイ・ケースです。


以上の4つ、いかがでしょうか。
さらにセキュリティ、バリデーションなどFuelPHPは充実しています。
「こんなことしたいな...」と思った際は一度FuelPHPのドキュメント等を見てみると大抵あります。
また機会を見つけてFuelPHPの情報をまとめていきたいと思います。

2013年5月14日火曜日

PHPerがNetBeansを使いたくなる7つの理由

PHPerの皆様、日頃のコーディングには何をお使いでしょうか。
PHPの方はVimやEmacsよりもテキストエディタを使ってる人が多いイメージなのでSublime Text2でしょうか。
かく言う私もこのエントリーを電車の中でSublime Text2を使って書いてます。


「Sublime Text 2はじめました!」に贈る日本語での情報のリンク集


しかしながら開発をするなら僕は断然IDE派です。
ユニットテスト、補完、リファクタリング、どれをとってもIDEはプログラマーをサポートしてくれます。
また静的型付けな言語以外ではIDEの恩恵を受けにくいのではないかと考える方もいらっしゃるかもしれません。
しかしそれは杞憂です。
特にPHPは動的言語の中でもIDEの恩恵を受けやすい言語です。
つまりPHPを書く上でIDEを使わない手はありません。
どうでしょう少しはIDEに興味が湧いて来ましたか?
そこでオススメのIDEがこちらです。

NetBeans

なんとNetBeansはFuelPHPのサポートされたプラグインが有志によって開発されています。
本日はそんなNetBeansの素晴らしさをちょっとした使い方とFuelPHPの使い方をご紹介したいと思います。
(決してJava Day Tokyoのセッション中ではありません)

※対象はNetBeans7.3のPHPプラグインです
ダウンロードはこちら<<

1 NetBeansの補完について
NetBeansのdefaultのコード補完はControl+スペースです。
例えば下記の画像のように標準のメソッドを呼ぶことができます。






また当然プロジェクトの名前空間、スコープ内のメソッドや変数も呼ぶことができます。
引数も保管し、defaultの値を指定している場合は引数を選ぶこともできます。



この他にもメソッドの上で/**とするとコメントのテンプレートを生成してくれます。
これは引数、返り値を見た上でテンプレートを作成してくれますので大変便利です。
//○○をXXする関数
と書くよりも



を書くほうが情報も多く、メンテナンス性も向上します。
またこのようにメソッドにコメント使うことコード補完時に参照され、情報として表示されます。



さらに!!
html、CSSやJSも補完してくれます。
強力にhtml5やCSS3を保管してくれます。
さらに詳しいことはこちら

コードの補完


2 NetBeansのバージョン管理ソフトウェア対応と使い方について
NetBeansはdefaultでSVN、Mercurial、Gitをサポートしています。
プロジェクト内のコードであればGUIベースで以下の通りでcommitすることができます。


Gitの場合のリモートリポジトリもGUIベースで行えます。
通常時(Conflictした時やマージの時)はCUIを使った方が楽なことも多々ありますが通常使うには十分です。
またNetBeans内でのバージョン管理とバージョン管理ソフトウェアの連携がとても強力です。
こちらの画像のようにNetBeansはdefaultで更新履歴を持ちます
(初期設定は7日分ですが任意にツール→オプション→その他→バージョン管理→履歴 から保管する日にちを変更できます)

さらにバージョン管理ソフトウェアを使えばコミットしたリビジョンも比較できます。
例えば差分は次のとおりに比較できます。

履歴を選んで差分を確認


右クリックの「履歴をから戻す」を使うとまるごと戻すことも可能も可能です。
この機能は非常に協力ですのでぜひぜひご活用ください。

3 FuelPHPのプラグインの導入
これだけでも使うには十分すぎるNetBeansの便利さですが今一番熱いPHPのWEBフレームワーク、FuelPHPに対応しています。
蛇足ですが標準でZend、Symfony、Doctrine2をサポートしています。
またテンプレートフレームワークとして使われることの多いSmartyもサポートとしています。
そしてプラグインもプロジェクトの作成も選ぶだけ。

日本語に完全対応したGUIですから非常にスムーズですね!!

4 FuelPHPの補完
そして当然FuelPHPの補完もバッチリ!!
例えばコントローラーでの補完。
モデルの呼び出し
setterやgetterの呼び出しもサポート。
当然ORMもご覧のとおり。



5 ユニットテスト
さてここまで読まれた読者さまなら一度は聞いたことがあるのではないでしょうかユニットテスト。
別名では単体テストと呼ばれ、メソッド単位で行われるテストですがPHPではPHPUnitと言うツールを使います。
NetBeansはこちらも対応済み。
ただしPHPUnit本体の導入は別途必要です^^;
WindowsユーザでXAMPP(ローカルにWEBサーバ環境を立てる)を使ったPHPUnitの導入はこちらのチュートリアルが参考になります。
そして本題のユニットテスト。


戻り値が不正の場合は
わかりやすく赤くなってくれます。
そしてFuelPHPはユニットテスト(PHPUnit)に完全対応!!
当然、ユニットテストできます。
例えばすでに作成済みのViewModelのメソッドをテストしたい場合このとおりです。
まずメソッド作ります。
そしてメソッドはやっぱりテストコードを作りたいですよね。
まずは右クリックして…



あら不思議!テストコードがまるっとできます!!
この状態でメソッドを変更すれば当然赤くなるので安心してリファクタリングできますね!!
またTDDっぽく機能追加する場合はテストコードを変更して赤(エラー)から緑(成功)を目指して修正することもできます。
今流行?TDD【テスト駆動開発】も可能です。

6 ちょっと便利なショートカット
私は実はdefaultのキーマップからEclipseに変更していますw
なのでフォーマットはControl+Shift+Fです。
defaultではAlt+Shift+Fです。
オプションのエディタのタブでフォーマットの設定も行えます。
また保存時に自動的にフォーマッターを走らすことができます。
統一感のある美しいソースになるのでフォーマッターは是非ともご活用ください。
またメソッドを選択時にF3で行われるメソッドの参照先への移動(メソッドジャンプ)も非常に便利です。
その他にも四角選択(矩形選択)や一括置換も非常に便利で協力です。
是非、お時間があるときにはNetBeansのオプションのショートカットキー一覧を見てみて下さい。

7 NetBeansの組み込みブラウザの使い方
NetBeansといえばきしださん。
きしださんの「きしだのはてな」がすごく情報が詰まってます。
NetBeans使いは是非一読ください。
そして組み込みブラウザにも詳しく書いてありますのでこちらを御覧ください。

NetBeans7.3(Beta)に組込みブラウザがついて想像以上にすばらしい


ここまで読んでくれた皆様、NetBeansに興味が湧いて来ましたでしょうか?
開発環境は好みで選ぶべきですが「よくわからないけどEclipseを使ってる」や「みんなが秀丸だから秀丸を使ってる」って方は非常に損をしていると思います。
日本語対応しているNetBeansの機能の豊富さを知らずに開発するのは残念です。
ですので一度でも試していただけたらと思います。

2013年2月13日水曜日

今からFuelPHPを使う人が知るべき5つのこと+1

FuelPHPいいよFuelPHP。
正直、新規の方にオススメするphpのフレームワークはコレで一択です。
と溺愛してますが職場はZendフレームワーク...
で久々にFuel触ってハマッたのでメモを残しときます。
つまりこんなタイトルですが自分用です(キリッ

#### 2014/09/24にリメイク版作りました ####

OSC2014@広島に行ってきました #osc14hi

#### ここまで ####

1 FuelPHPの使い方

こちらのスライドが参考になります。
というかほぼ網羅してて完璧です。



こちらも綺麗にまとまっていてすごくわかりやすいです。

10分でわかるFuelPHP


ただサーバの設定によっては動かない場合も。
理由はデフォルトのtimezoneの設定がされてないこと。
なので

/etc/php.ini 



date.timezone = "Asia/Tokyo"

を追記するか

fuel/app/config/config.php

のArrayに

'default_timezone'   => 'Asia/Tokyo'

を追記するかのどちらかで対応出来ます。
また詳しくはこちらに書いてあります。

2 JQueryMobileの使い方(localから指定する場合)
まずjQueryMobileサイトからソースを落としてきます。
それとJqueryも必要ですから落として来ます。

ソースを解凍してここにおきます。

public/assets/js
public/assets/css

読み込みはviewにこんな感じ

echo Asset::css('jquery.mobile-1.2.0.min.css');
echo Asset::js('jquery-1.8.3.min.js');
echo Asset::js('jquery.mobile-1.2.0.min.js');

URLを気にせず指定のファイルを直感的に呼べるのはいいですね。
でポイントですがJqueryMobileの1.2.0はJqueryの

1.9系では動かないので1.8系 ※2013/02/13現在

を使いましょう。

3 TwitterAPIとの連携
Fuelのイケてるところと言えばパッケージ。
その導入はシンプルです。
GitHubからサクッとインストール出来るため、皆さんにもどんどん活用して欲しいですね。
と言うわけでここではTwitterAPIとの連携方法について。
まずはfuel-twitterをインストール。
インストールから使い方まではこちらのブログにまとめてあります。
インストール出来ました?
APIを叩いてみましょう。
値が帰ってきてアプリ連携出来ましたね!
次はユーザー情報取ってきましょう。
どうでした?
エラー出たでしょ。

Twitter::get('account/verify_credentials');

そう、コレ動かねーから。

TwitterAPIのバージョンアップに対応してないんですよ本家。
なのでGitHubのNetworkからブランチ追って新しいヤツのDiff見て動く奴探して来ました。
2013/02/13時点では動くソースを上げておきます。

forkして改修したソース

これを入れて試して見ましょう。
ほら、動きましたね!!
Libraryを導入すると実装が簡単に出来る反面、APIなどの仕様変更で動かなくなるモノも多いので注意しましょう。
でもメジャーなモノならGitHubのブランチを追ったりすると大体直ってます。

 4 HTMLヘルパーについて
ここの記事がすごく参考になります。

FuelPHP の Fieldset を使おう(Form の自動生成)Add Star

ほんとSmartyとか必要ない。
最初コレ知らなくてviewModelにゴリゴリプログラム書いてました。
8割くらいこれで要らなくなりました(遠い目

5 FuelはPostgreSQLに優しくない
具体的にはクエリビルダがPostgreSQLのArray型に対応してないです。
というか多くのORMたちは対応してないのですが...
特にハマるのはInsert。
なので簡単な例を載せておきます。

//idをarray型とする
$SQL = 'INSERT INTO t_hoge(id) VALUES (:id)';
//{}で囲ったカンマ区切りの任意の文字列を作る
$id = '{1,2,3}';
$query = DB::query($SQL)->bind('id', $id)->execute();

これは最終的なSQLとしては

INSERT INTO t_hoge(id) VALUES ('{1,2,3}')
となっています。
実施のプログラムは$idの生成を動的に配列から変換してやってます。
自分的にもなんだかなぁって感じです。
もっとスマートなやり方のマサカリ、お待ちしております!!
ついでにクエリビルダの使い方はこちらがすごくまとまってます。


ということで現在、仕事じゃないWEBアプリを作ってます。
公開までもう少し掛かりそうですがまた公開した時に宣伝も兼ねて苦労話したいと思いますw

更に+1 2013/03/27に追記

第4回 岡山PHP勉強会


こちらの登壇資料を追加しておきます。





仕事でFuelPHPを使い始めたので気づいたことを纏めました。

FuelPHPを仕事で使うときに知っておくべき4つのこと