PHP, CodeIgniter, MIXIアプリ |
2月22日、第50回PHP勉強会(http://events.php.gr.jp/events/show/90)に参加してきました。オープンソーシャル関連の勉強会ということで、
50名以上の参加者がいる勉強会になりました。gusagiさん、お疲れ様でした。
http://d.hatena.ne.jp/gusagi/20100223/1266859247 gusagiさんの日記はこちら
で、もともとPHPを使ってMIXIアプリを作りたい(作ってる)んだけど、なかなか情報がないんで、勉強会とかやってくれません?
とgusagiさんに打診したんですが、、、なぜか俺が話すことに。。。^^;
当日のスピーカーは、
webooさん
kunitsuji
個々一番さん
の3名。
勉強会参加者の中には、、、PHPの神といわれているあんな人や、CentOSの書籍を少し前に出したあんな人や、
そりゃもう、、、恐れ多い方がたくさんいらっしゃっててですね。。。
そんなところで俺がなにをはなせばいいんだ!?みたいな状況に追い込まれてましてw
一応、
CodeIgniterを使ってWEBアプリを作るようにしてMIXIアプリを作る
という概要で話をさせてもらいました。
今実際にさぎょうしているので。
しかし、PHPでいくらMIXIアプリ作れるといっても、、、サーバインフラ周りのほうが実は大変なんじゃないか?とおもってましたが、
個々いちさんの話をきいてたら、納得。
そっちのほうが大事でしょうな。。。
webooさん、Twitterでフォローしてるんですが、勉強会で初めてお会いしました^^;
よろしくお願いします。
PHP, CodeIgniter, MIXIアプリ |
久しぶりのブログ投稿です。
ずっとしこしことCodeIgniterを使ったフレームワークの拡張を行っておりましたが、現在は次のような感じ
1)MatchBoxライブラリを辞めて、HMVCを使ってモジュール化を実現。
これに関しては、速度の問題、CORE本体に手を入れなくて済むという問題をクリアしてくれました。
※メモリの利用率はMatchBoxより気持ち使うようです。
※移植で一番問題がでたのは、コントローラがHMVCの独自になってますが、ここにバグが。(最新バージョンでは
直っているかも知れません。作者に変な英語でバグの部分と再現方法、パッチを送りましたので)
簡単にいうと、Controllerの_outpu()メソッドが使えなかったんです。また、CIのオブジェクトを利用するとき、
独自のアプリケーション用共通コントローラをつかっていたのですが、そのメソッドやプロパティを参照しませんでした。
こちらに原因があるのかと思って調べたところ、そもそものCIオブジェクトの保持の仕方が違ってました。
_outputを使わなかったり、モジュールのコントローラからアプリのコントローラのメソッドを利用する場合はきがつかないのですが、
codeigniter.phpが最終出力を行う際、outpu.php、アウトプットクラスを見てそこから出力をおこなうので、
CIオブジェクトに_output()があれば、というのがCIのつくりです。つまり、コントローラはCIのオブジェクトとして動くんですが、
HMVCの場合、コントローラを独自にHMVCが用意しており、そこでのCIオブジェクトの保持方法に不具合があったということですね。
とりあえずアウトプットクラスをアプリにおいてそこで処理するようにしました。。
2)MyNETS2という名称をSNSに限定
現在触っているものはSNS、ということではなくCodeIgniterを使ったプリケーション開発フレームワークです。
ですので、あくまでも開発ツールという位置づけ。
そこから作り出されたアプリと名称を分けることにしました。
MoonBASEという名称に決定。(どこかで聞いたことありますが)。
で、Usagi Project、USAGIから連想する月、の基地、ベースということでMoonBASE。
でそこから作り出される、現状のMyNETSの新バージョンを「KAGUYA」とすると思います。
3)本題に入りますがw
そのMoonBASEで簡単にMIXIアプリを構築する事ができるようにしています。
MIXIアプリはフラッシュをつかったゲーム、が多いのですが、MoonBASEでは既存のWEBサイトを構築するようにして
オープンソーシャルアプリ、MIXIアプリを構築することが可能です。
OpenSocial RESTfull API を使ってowner_idなどを取得し、それを元にアプリ側のDBと照合します。
認証はOAuthを使いますが、これもライブラリを入れてコンシューマーキーやアプリIDを設定保存するだけで動きます。
フラッシュで作る場合はデザインなど高いスキルが要求され、自分には太刀打ちできませんが、
WEBサイト構築を行うようにつくれば、そのままMIXIアプリとしてうごかせるので、今までの経験が無駄になりません。
現在、セッション処理をMIXIアプリのowner_idを使うことで行うように手を入れている状況です。
出来上がれば、これでいくつかMIXIモバイルアプリを作る予定。
PCもいけますね。
PHP, CodeIgniter |
デフォルトのCodeIgniterでの _remap() メソッドでは、メソッド名の指定のみ有効で、パラメータ付きのコントローラのメソッドを再マッピングできませんでした。
調べたところ、Codeigniter.php のクラス内で再マッピングしている場所はこちら
if (method_exists($CI, '_remap'))
{
$CI->_remap($method);
}
else
{
// is_callable() returns TRUE on some versions of PHP 5 for private and protected
// methods, so we'll use this workaround for consistent behavior
if ( ! in_array(strtolower($method), array_map('strtolower', get_class_methods($CI))))
{
show_404("{$class}/{$method}");
}
// Call the requested method.
// Any URI segments present (besides the class/function) will be passed to the method for convenience
call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 2));
}
再マッピングしない場合は、call_user_func_arrayをつかってパラメータを配列で渡していますが、
_remapを使った場合、メソッドしか指定していません。
なので、これを使えるようにカスタマイズしてみました。
if (method_exists($CI, '_remap'))
{
$CI->_remap($method, array_slice($URI->rsegments, 2));
}
else
{
// is_callable() returns TRUE on some versions of PHP 5 for private and protected
// methods, so we'll use this workaround for consistent behavior
if ( ! in_array(strtolower($method), array_map('strtolower', get_class_methods($CI))))
{
show_404("{$class}/{$method}");
}
// Call the requested method.
// Any URI segments present (besides the class/function) will be passed to the method for convenience
call_user_func_array(array(&$CI, $method), array_slice($URI->rsegments, 2));
}
これだけではだめで、
コントローラで_remap()を使う場合に
function _remap($method, $params = array())
とします。
で、条件によって振り分ける際に、
$paramsに値がある場合は
call_user_func_array(array($this, $method), $params);
無い場合は
$this->$method();
とすることで、パラメータ付きのものが渡せるようになりました。
これ、本家にパッチを贈ろうかと思いますが、、なぜ_remapの場合methodのみにしてるんでしょうかね?
理由があるのかもしれませんが。。。
CIでanchor()タグの第二引数に <img タグを入れると、おかしな <a タグが生成されます。
これは、自動的に title に第二引数が渡されるためです。
<img タグを入れて画像のリンクを生成する場合は
anchor('hogehoge/fugafuga', '<img src="hoge" />', array('title'=>'ほげげ'));
として、第三引数にタイトルを入れればOKです。
ちょっとした方法ですね。
PHP, CodeIgniter, セミナー |
2009年9月5日(土)、PHPカンファレンス2009にてCodeIgniterを活用した業務案件の効率化うんぬん。。を発表してきました。
時間は20分。
資料はこちら。
時間も短かったので、具体的なソースを開設できませんでしたが、それなりにいい感じでした。
また、エロい人たちからも概ね好評だったようですが。。。ここが一番怖いw
まあ、仕事に使うために汎用性を上げると、当然カスタマイズしていくわけですが、
そういう部分でCIは触りやすい、ということですね。
基本的に何でもかんでもサポートされているわけではないので、たとえば日本の携帯需要向けの開発になると、
まず作らなければなりません。
そんな時に組み込み易い、なおかつコアの部分には手をつけないで、フレームワーク機能を損なわずカスタマイズする、
ということにCodeIgniterは向いていると思います。
CodeIgniterを使ったアプリケーションBASEとして「MyNETS2」をぜひw