Contenu connexe
Similaire à Yet another use of Phalcon
Similaire à Yet another use of Phalcon (20)
Yet another use of Phalcon
- 2. About me
Yuji Iwai(鰯)
@104
株式会社ソニックムーブ 2012年年2⽉月⼊入社
アプリケーション開発&インフラ構築とかを⽣生業にしてます
⾔言語: PHP(3y)/Perl(7y)/Python(1y)/Objective-C(1y)
フレームワーク: symfony1.4/Silex/Codeigniter
Phalcon歴: 1年年ちょっと
社内で最初にPhalconを導⼊入した⼈人
- 7. サーバ構成について
App
– Nginx + php-fpm
– PHP v5.4 (Non APC)
– Phalcon v1.3.1
– Memcached
– fluentd
Worker
– Upstart
– start-stop-daemon
DynamoDB, SQS, SNS, RDS,
ElastiCache(Redis)
- 8. 使いはじめて不不満だったこと
• 設定を ini じゃなくてYAMLで書きたい
• RoutingもAnnotationじゃなくてYAMLがいい
• Composer使えるかな
• Volt が … coredump
↓↓↓↓↓
社内で普及させるには乗り換えやすくしたい
Symfony1.4 → Phalcon
レガシー → モダン
- 13. ServiceProviderを実装
Laravel や Silex などで実装されている
ServiceProviderをPhalconで実装できるようにした
メリット
– ライブラリの導⼊入が簡単になった
– だれでも、すぐに使い始められるようになった
– DI Componentの⽣生成プロセスを隠蔽
– Componentを登録して設定するだけ
– 設定の使いまわしができるようになった
デメリット
– ⽣生成プロセスがServiceProviderに依存
– 設定の複雑化
- 20. コントローラーで気をつけるべきこと
• redirect したら、return しろ
– LocationとStatusCodeが設定されるだけ
• Routeは後に追加されたものから評価される
• APIを実装するときは
– app->useImplicitView(false) もしくは、
response->setContent($content) したものを明
⽰示的に return する
- 21. モデルで気をつけるべきこと
• useDynamicUpdate, keepSnapshots は true にすべし
– Updateクエリに全てのフィールドが⼊入っている
• 1アクセス内での2回⽬目の save/update は気をつけろ
– snapshot は、SELECTのタイミングでしか⼊入ってない
• save/update/delete の返り値はちゃんと確認すべし
– model->getMessages() もしくは、transaction->getMessages() に
エラーが⼊入っている
• データベースからデータ取得は⽂文字列列
– これはPDOの仕様に基づくもの PDO::ATTR_STRINGIFY_FETCHES
=> false, PDO::ATTR_EMURATE_PREPARES => false など適切切に
設定する必要がある
• 厳密なデータの影響件数は $connection->affectedRows()
- 22. 502 Bad Gateway
多くの場合 Volt テンプレート内での問題が原因
• テンプレートのパースが正常にできなかった
– ある程度度はパースエラーが出る
• Null⽂文字列列を扱えない関数へNullを渡した
– 本来、Fatal Error としてエラーが出るがテンプ
レート上で発⽣生すると Core dump して死ぬ
テンプレートへのNullは排除すべし
- 23. 学習コストについて
• ドキュメントが英語だから分からん
→ サンプルコードから読み解くべし
• フレームワークのソースがC⾔言語だから分からん
→ ⾷食わず嫌いはよくありません、まずは⾒見見てみましょう
→ C⾔言語知らない⾃自分でも、なんとなく意図は読めた
→ 有志でPHPの実装してる⼈人がいるので⾒見見⽐比べてると
慣れてくる https://github.com/scento/phalcon-php
• core dumpした!!
→ 多くの場合において渡している引数やその値に問題が
多いです、実装を読みつつ、呼び出し⽅方法などで
回避できることが多いです