PHP Phalcon 噂の爆速フレームワーク、はじめの一歩。
こんにちわ、パッションの伝道師こと鰯です。 今月の私の標語は『速いは、正義!!』です。
Webフレームワークは、いつの時代も、速さと戦ってきました、最近ではWebフレームワークの ベンチマークサイトまで登場して、いかに、速さに対する関心が高いかというのが伺えますね。
そこで、今PHPで速いフレームワークと言えば “Phalcon“!!
もちろん、他にもいくつもの速いフレームワークはあるのですが、PhalconはFull-Stackでありながらも、際立つ速さを持っているというのが他と違うところです。
ですが、C言語で実装された、PHPのExtensionというわけで、速くて当然と言えばその通り。
しかしながら、昨年には、『Facebookが開発、運用ともにHHVM/JITを使用開始』なんてニュースもあり、PHPの速さに対するアプローチの仕方が、新たな時代へ突入した感じがします。
もともと同様の取り組みとして、Yaf というフレームワークもありましたが、古くからあるため、 Namespaceによる実装でなかったりと、今使うにはちょっとという感じがします。
Phalconは昨年ぐらいから登場しはじめ、もちろん、Namespaceによる実装がされており、PHP5.4でも、もちろん動きます。
そこで、Phalconをはじめるにあたって、自分がつまずいたところを紹介しつつ、最初の一歩を踏み出せるように、こうすると幸せになれるよねというところを、いくつかご紹介します。
1. チョ… 補完できねぇーしっ!!
はい、そうです、補完なんて出来るわけありません、だってC言語で作られてるエクステンションなんですから。
だからと言って、補完ができないわけではございません、ちゃんとそのためのソリューションが提供されております。
本日ご紹介するソリューションはこちら、『Phalcon Devtools』!!
こちらのレポジトリにあります、ide/ フォルダの中には、ちゃんとバージョンごとのPHP版Phalconがっ! https://github.com/phalcon/phalcon-devtools/tree/master/ide
というより、Interfaceなどの公開されてるAPIの定義ファイルです。
これをお使いの開発環境のインクルードパス等に設定しておけば、 あら不思議(不思議ではありません)、普通に補完できるようになりますっ!
2. PHP5.4 Built-in server で Beautiful URI
ドキュメントではApacheの例が記載されており、index.php?_url=$1
とRewriteで実現する方法が記載されています。
となると、Built-in serverでは http://localhost:9000/index.php?_url=$1
のリクエストで開発せなアカンのかいっ! BeautifulでないURIは目に毒です、なので変更しましょう。
1 2 3 4 5 |
[sourcecode lang="php"] $router = $this->getDI()->get('router'); $router->setUriSource(\Phalcon\Mvc\Router::URI_SOURCE_SERVER_REQUEST_URI); $router->removeExtraSlashes(true); [/sourcecode] |
ref: http://docs.phalconphp.com/en/latest/reference/routing.html#uri-sources はい、これでBeautiful URIの設定完了です、美しいって本当に良いですねっ!! ついでに、removeExtraSlashes
も設定しておくと幸せになれそうなので、そちらも追加。
3. 設定を YAML で書きたい…
えぇ、そうですね、今やWeb Frameworkのデファクトスタンダードと言っても過言ではないYAML
パフォーマンスのことを考えるなら、INIファイルも仕方ないですが、
それでもYAMLが良いんです!!
PhalconのConfigはAdapterパターンで実装されているので、容易に別のファイル形式の読み込みでも実装が追加できます。
それでは、さっそく私の自作したAdapterをご紹介… と言いたいところですが、作ってから気づきましたが、、、。
すでにあるじゃんっ!!
同じことやってるしっ!!
ということで、こちらをご紹介、みんな考えることは同じですね、、。
https://github.com/phalcon/incubator/tree/master/Library/Phalcon/Config/Adapter
Incubatorにはその他にも、いくつかのライブラリが提供されておりサードパーティからの提供がされております。
一度、一通りご覧になることを推奨します、、。
https://github.com/phalcon/incubator
4. Voltテンプレートで…
VoltはSymfony2のtwig互換というか、もともとjinjaインスパイアなので、同じですね。
ただ、Voltはまだ、twigやjinjaと同等までの機能は実装されていないようです、、。
それでも、テンプレートエンジンがC言語で実装されているというのは魅力的ですよね。 さっそくテンプレートを…
1 2 3 |
[sourcecode lang="html"] <span>{{ product.name|e }}</span> [/sourcecode] |
はい、これ落ちます。 escapeのフィルターですが、phalcon v1.1.0ではsegmentation faultで落ちます。
escapeとか、そんな基本的なところで落ちるとか…orz
ということで、フィルターを自前で実装しましょう。 三項演算子にしてるのは、null渡すと、またしても落ちちゃったためです、、。
1 2 3 4 5 6 |
[sourcecode lang="php"] $compiler = $volt->getCompiler(); $compiler->addFilter('h', function ($resolvedArgs, $exprArgs) { return 'htmlspecialchars('.$resolvedArgs.'?:\'\')'; }); [/sourcecode] |
ref: http://docs.phalconphp.com/en/latest/reference/volt.html#id2 あとは、こちらも落ちます。
1 2 3 4 5 6 7 8 9 10 11 |
[sourcecode lang="html"] {% block content %} <h2>コンテンツ</h2> {% block subcontent %}{% endblock %} hogehoge {% endblock %} [/sourcecode] |
block内でのblockは、まだ使えません、v1.2.0で対応予定です。
というところで、今回はここまでにしておきます、ってか、最後の方は落ちてばっかりじゃんっ!
大丈夫です、今のところ落ちたのは、これぐらいで、他は良い感じです!!
v1.1.0も、そこそこ使えます、v1.2.0ではより多くの機能が実装予定!!
RoadMapに今後対応予定や実装中の内容が一覧されているので、ご参考までに
https://github.com/phalcon/cphalcon/wiki/Roadmap
バグレポートや過去の質問などは、githubのISSUEやStackOverflowにいろいろ載ってるので、つまずいたら、 まずは、探してみることをオススメします。
http://stackoverflow.com/questions/tagged/phalcon
https://github.com/phalcon/cphalcon/issues?state=open
そんな、Phalconですが、やっぱり未知のバグについては、自分で調べないといけません。
次回は、そんな、Phalcon のバグを調べる時に役立つ、gdbの扱い方などをご紹介できればと思います。
それでは、良いPhalconライフをっ!!
あ、あと、最近 Google App Engine(GAE) でPHPが使えるようになりましたが、GAEの機能リクエストにPhalconがありましたので、ぜひとも、このチケットにスターを付けてもらえると、GAEでPhalconが使えるようになるかもしれないので、お願いします!!!
https://code.google.com/p/googleappengine/issues/detail?id=9336