生而為人,不小心採到別人的地雷是很合理的。但,生而為工程師,一直採到別人的地雷就不是很合理了。
PhalconPHP
身為一個 PHPer,用一些看起來很潮的 Framework 也是很合理的。而且,他還是包成 C-Extension 的方式執行,超級潮的!
PhalconPHP 是使用 Zephir 這個工具,將 .zep
包裝成 .so
的 C-Extension 餵給 PHP 去執行的。看,是不是很潮,核心錯誤訊息噴出來你也不知道怎麼改呢(欸
但是,潮是要付出代價的!
從 0.9x ~ 1.x 事實上沒有太多問題,因為提供的功能相對單純,所以使用上也沒有太多讓人覺得困惑的地方。再加上,反正當時也不提供原始碼,所以你也沒得抱怨。
1.x to 2.0
2.0 出現之後,官方也開始在 Github 當中提供原始碼(是使用 .zep
檔案格式,用 Zephir 去做編譯。
問題來了,每次的版本號都有雷,包含核心 打錯字(已哭
然後,大部分的問題在 2.0.7 之後,少了很多,大抵上都是比較輕微的問題。
雷區
- 資料庫不存在時,Model 即便你有寫,他不會告警,整個應用程式會在你用到那個 Model 的時候,直接爆炸。
- 寫測試的時候,如果 Routers 不指定
Namespace
,Module
會出現異常(例如你要使用application->dispatch
去指定一個 URI 拿 render 好的話面的時候 - Micro Application 如果使用
Collection
來做 Handler 的話,內部的$application
會拿不到 Handler,你必須額外處理。 - Micro Application 的 Handler 如果
extend Phalcon\Mvc\Controller
並不會因此而可以使用其特性(例如你拿不到dispatcher
- Model 使用
AS alias
的 SQL 要使用底線分隔,例如display_name
而不可以使用displayName
,否則會出現 Column Map 不存在的錯誤。 - Model 本身不存在
transaction
,真正的提供者是modelManager
在 Controller 裡面(由 DI 提供 Phalcon-incubator
所提供的 UnitTest 會把 DI 做一次reset()
,所以不建議直接擴展(extend
),自己寫一個比較保險。
小結
當然還是有踩到很多莫名其妙的東西,但是也不算是地雷,只是使用的方式要更改而已。其他的想到在補 XD