《PHP教程:phalcon框架使用指南》要點:
本文介紹了PHP教程:phalcon框架使用指南,希望對您有用。如果有疑問,可以聯(lián)系我們。
相關(guān)主題:phalcon教程
初次認(rèn)識phalcon是在剛學(xué)php的時候,最近終于有機會用上了.故此說說使用上的一些感受PHP編程
個人是很喜歡phalcon這套框架的方式,使用依賴注入,讓代碼組織很靈活,耦合也很低.但是,也許是框架東西太多了,遇到幾個坑. github上一年以上的issue也還沒辦理.不過有一定開發(fā)經(jīng)驗的話,還是可以自己修復(fù)的.被這幾個坑浪費了不少時間....PHP編程
第一個是view.PHP編程
phalcon的view,可以分成兩大部分,一是全局的layout,二是controller/action的部分, 讓使用時更加方便,設(shè)置好layout后,只關(guān)注controller部分的view即可. 但是關(guān)于view的路徑設(shè)置問題,要關(guān)注這幾個參數(shù)
MainView(主layout文件路徑+文件名,但不包含擴展名,擴展名是在注入視圖引擎時的key鍵值),PHP編程
LayoutsDir(layouts的目錄路徑),PHP編程
Layout(主layout文件名,可根據(jù)需求,動態(tài)使用layouts目錄下的某個文件充當(dāng)mainView),PHP編程
PartialsDir(使用partial函數(shù)時,查找模板文件,如partial('main/header') 則查找路徑是"/你的partialsDir/main/header.volt" . ),PHP編程
ViewsDir(設(shè)置controller/action對應(yīng)的模板文件所在的目錄.和partialDir類似,自動查找目錄下的模板文件)PHP編程
BasePath(視圖的目錄的基礎(chǔ)目錄,phalcon和根據(jù)所有設(shè)置的dir來組合路徑,查找模板文件,坑便是這了)PHP編程
我剛開始用這個view的時候,使用的是絕對路徑,因為絕對路徑配置和管理比擬方便.
然后我就被坑了.浪費了一個下午的時間調(diào)試.
根據(jù)官方文檔給出的例子反復(fù)測試,發(fā)現(xiàn)這個view組件只能使用相對路徑設(shè)置路徑,BasePath不用設(shè)置.PHP編程
一氣之下就去翻phalcon的源碼了.開發(fā)語言是Zephir,phalcon團隊本身開發(fā)的語言.
PHP編程
語言語法比擬簡單,容易懂.然后看到了這句.
PHP編程
PHP編程
..]PHP編程
PHP編程
看起來像是沒有判斷是相對路徑還是絕對路徑,直接組合起來了罷了的,猜測是這里引發(fā)了問題.
PHP編程
而且是直接按順序解析action , layout , main layout這些模板文件.
PHP編程
于是想驗證一下.所以我寫了幾個調(diào)試文件,打算調(diào)試一下.
PHP編程
翻查phalcon源碼過程省略1000字...找到必然會調(diào)用,并有路徑處理的幾個主要辦法,繼承View相關(guān)的幾個classPHP編程
這里也強調(diào)下,很多人喜歡用echo,一般情況是沒問題, 但最好還是用文件記錄吧,因為echo局限性其實挺大的, 你不知道echo buff什么時候打開,什么時候關(guān)閉..使用文件來記錄log最保險了.
我測試的代碼,使用多模塊的方式.PHP編程
BaseView文件,繼承phalcon的view,并且打開這個辦法的報錯信息PHP編程
PHP編程
BaseVolt文件,繼承模板引擎voltPHP編程
PHP編程
view注入代碼,和目錄布局如圖PHP編程
PHP編程
log記錄如下PHP編程
頁面輸出如下:PHP編程
PHP編程
跟想像的一樣,使用絕對路徑時,無論如何,phalcon都是直接拼接以上設(shè)置的路徑,
PHP編程
當(dāng)開發(fā)者想動態(tài)使用controller/action的view,但layouts主目錄又在上層目錄時,就會出問題.
PHP編程
phalcon找的main layout路徑是Phalcon\Mvc\View\Exception: View '/Users/Hin/work/phalcon_mode/app/modules/admin/views/layouts/main' was not found in the views directory
PHP編程
而我要的是/Users/Hin/work/phalcon_mode/app/views/layouts/main
PHP編程
然后找不到路徑,main layout模板文件就不起作用了..........PHP編程
所以,真的就只是直接組合三個路徑罷了..所以,在設(shè)置路徑的時候,就看自己的取舍了.
phalcon view源碼里三個變量中,basePath,viewDir(關(guān)鍵就是作者對viewDir這個變量理解有誤,導(dǎo)致的bug) 看成是基礎(chǔ)的路徑. viewPath是依次執(zhí)行_enginrender時的action view,layout view ,main view的路徑.
理解了這個就可以自己慢慢設(shè)置好了路徑了.....PHP編程
解決方法有三個. 一 是自己寫個View繼承phalcon的View,處理路徑. 思路是除了action的定位外,其他定位將viewDir變?yōu)榭? 二 是修改phalcon源碼,再自己編譯一遍(在_enginRender外部處理好路徑定位,去除_enginRender和路徑定位的耦合) 三 是,不管了,直接使用相對路徑(不設(shè)置basepath,viewsDir因為要動態(tài)定位action view,使用絕對路徑, layoutsDir partialsDir使用相對路徑) github上是有人發(fā)過這個bug的issue,可是作者沒理會......
------------------------------華麗分割線------------------------------------PHP編程
第二是modelPHP編程
還有個坑,是關(guān)于phalcon的model.一樣是發(fā)了issue,作者沒管.
根據(jù)文檔model是提供了setter 鏈接描述 辦法的,可實際上,setter卻不起作用...PHP編程
然后像view一樣,本身修復(fù)好...
PHP編程
個人認(rèn)為setter getter是非常好用的功能,但有些人卻覺得沒用,見仁見智啦. 我們的開發(fā)模式是model和controller 由不同的人開發(fā),有了setter getter,數(shù)據(jù)調(diào)用者只管拿數(shù)據(jù)就可以了, model數(shù)據(jù)出問題,在model中修改即可,controller不需要改動.工作模式上耦合可以降低很多.
不過用這個框架的開發(fā)的項目夭折了,再深入點的坑也遇不到了.沒有意外的話,短期內(nèi)也不會用了.
最近心情比擬糟糕.寫得比擬隨便.當(dāng)個記錄好了.......PHP編程
最后直接附上 github 源碼,多模塊模式開發(fā)用這樣的目錄布局也是不錯的,希望能幫到別人PHP編程
《PHP教程:phalcon框架使用指南》是否對您有啟發(fā),歡迎查看更多與《PHP教程:phalcon框架使用指南》相關(guān)教程,學(xué)精學(xué)透。維易PHP學(xué)院為您提供精彩教程。
轉(zhuǎn)載請注明本頁網(wǎng)址:
http://www.fzlkiss.com/jiaocheng/7515.html