摘要:初次認識是在剛學的時候最近終于有機會用上了故此說說使用上的一些感受個人是很喜歡這套框架的方式使用依賴注入讓代碼組織很靈活耦合也很低但是也許是框架東西太多了遇到幾個坑上一年以上的也還沒解決不過有一定開發經驗的話還是可以自己修復的被這幾個坑浪費
初次認識phalcon是在剛學php的時候,最近終于有機會用上了.故此說說使用上的一些感受
個人是很喜歡phalcon這套框架的方式,使用依賴注入,讓代碼組織很靈活,耦合也很低.但是,也許是框架東西太多了,遇到幾個坑. github上一年以上的issue也還沒解決.不過有一定開發經驗的話,還是可以自己修復的.被這幾個坑浪費了不少時間....
第一個是view.phalcon的view,可以分成兩大部分,一是全局的layout,二是controller/action的部分, 讓使用時更加方便,設置好layout后,只關注controller部分的view即可. 但是關于view的路徑設置問題,要關注這幾個參數
MainView(主layout文件路徑+文件名,但不包括擴展名,擴展名是在注入視圖引擎時的key鍵值),
LayoutsDir(layouts的目錄路徑),
Layout(主layout文件名,可根據需求,動態使用layouts目錄下的某個文件充當mainView),
PartialsDir(使用partial函數時,查找模板文件,如partial("main/header") 則查找路徑是"/你的partialsDir/main/header.volt" . ),
ViewsDir(設置controller/action對應的模板文件所在的目錄.和partialDir類似,自動查找目錄下的模板文件)
BasePath(視圖的目錄的基礎目錄,phalcon和根據所有設置的dir來組合路徑,查找模板文件,坑就是這了)
我剛開始用這個view的時候,使用的是絕對路徑,因為絕對路徑配置和管理比較方便.
然后我就被坑了.浪費了一個下午的時間調試.
根據官方文檔給出的例子反復測試,發現這個view組件只能使用相對路徑設置路徑,BasePath不用設置.
一氣之下就去翻phalcon的源碼了.開發語言是Zephir,phalcon團隊自己開發的語言.
語言語法比較簡單,容易懂.然后看到了這句.
..]
看起來像是沒有判斷是相對路徑還是絕對路徑,直接組合起來了而已的,猜測是這里引發了問題.
并且是直接按順序解析action , layout , main layout這些模板文件.
于是想驗證一下.所以我寫了幾個調試文件,打算調試一下.
翻查phalcon源碼過程省略1000字...找到必然會調用,并有路徑處理的幾個主要方法,繼承View相關的幾個class
這里也強調下,很多人喜歡用echo,一般情況是沒問題, 但最好還是用文件記錄吧,因為echo局限性其實挺大的, 你不知道echo buff什么時候打開,什么時候關閉..使用文件來記錄log最保險了.
我測試的代碼,使用多模塊的方式.
BaseView文件,繼承phalcon的view,并且打開這個方法的報錯信息
BaseVolt文件,繼承模板引擎volt
view注入代碼,和目錄結構如圖
?log記錄如下
頁面輸出如下:
跟想像的一樣,使用絕對路徑時,無論如何,phalcon都是直接拼接以上設置的路徑,
當開發者想動態使用controller/action的view,但layouts主目錄又在上層目錄時,就會出問題.
phalcon找的main layout路徑是PhalconMvcViewException: View "/Users/Hin/work/phalcon_mode/app/modules/admin/views/layouts/main" was not found in the views directory
而我要的是/Users/Hin/work/phalcon_mode/app/views/layouts/main
然后找不到路徑,main layout模板文件就不起作用了..........
所以,真的就只是直接組合三個路徑而已..所以,在設置路徑的時候,就看自己的取舍了.
phalcon view源碼里三個變量中,basePath,viewDir(關鍵就是作者對viewDir這個變量理解有誤,導致的bug) 看成是基礎的路徑. viewPath是依次執行_enginrender時的action view,layout view ,main view的路徑.
理解了這個就可以自己慢慢設置好了路徑了.....
解決辦法有三個. 一 是自己寫個View繼承phalcon的View,處理路徑. 思路是除了action的定位外,其他定位將viewDir變為空. 二 是修改phalcon源碼,再自己編譯一遍(在_enginRender外部處理好路徑定位,去除_enginRender和路徑定位的耦合) 三 是,不管了,直接使用相對路徑(不設置basepath,viewsDir因為要動態定位action view,使用絕對路徑, layoutsDir partialsDir使用相對路徑) github上是有人發過這個bug的issue,可是作者沒理會......
------------------------------華麗分割線------------------------------------
第二是model還有個坑,是關于phalcon的model.一樣是發了issue,作者沒管.
根據文檔model是提供了setter 鏈接描述 方法的,可實際上,setter卻不起作用...
然后像view一樣,自己修復好...
個人認為setter getter是非常好用的功能,但有些人卻覺得沒用,見仁見智啦. 我們的開發模式是model和controller 由不同的人開發,有了setter getter,數據調用者只管拿數據就可以了, model數據出問題,在model中修改即可,controller不需要改動.工作模式上耦合可以降低很多.
不過用這個框架的開發的項目夭折了,再深入點的坑也遇不到了.沒有意外的話,短期內也不會用了.
最近心情比較糟糕.寫得比較隨便.當個記錄好了.......
最后直接附上 github 源碼,多模塊模式開發用這樣的目錄結構也是不錯的,希望能幫到別人
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21339.html
摘要:后端開發的疑惑后端開發最常面對的一個問題性能高并發等等。而到了時代,在方面有了前后端分離概念移動后端更是無力渲染天然前后端分離。 先來上一張前端頁面的效果圖(Vue + Vux + Vuex + Vue-Router)。showImg(https://segmentfault.com/img/remote/1460000010207850); 第一次做gif 沒什么經驗,太大了。加載...
摘要:是什么是開源全功能棧使用擴展編寫針對高性能優化的框架。也是松耦合的,可以根據項目的需要任意使用其他對象。安裝支持版本的不支持普通方式的編譯安裝,只能通過安裝。因此安裝之前,請先安裝。 Phalcon 是什么? Phalcon 是開源、全功能棧、使用 C 擴展編寫、針對高性能優化的 PHP 5 框架。 開發者不需要學習和使用 C 語言的功能, 因為所有的功能都以 PHP 類的方式暴露出來...
摘要:原文發表于入門教程之目錄結構很多初學的朋友,對于以框架為基礎構建的項目,應該如何組織目錄結構有點摸不著頭腦。只需要通過注冊這些目錄結構,即可正常使用。 原文發表于:Phalcon入門教程之目錄結構 很多初學Phalcon的朋友,對于以Phalcon框架為基礎構建的項目,應該如何組織目錄結構有點摸不著頭腦。比如多模塊的項目中,如何共用libs類庫和models目錄中模型類的情況,就有很...
摘要:本文描述了框架中數據庫操作方法,主要討論框架的組件中的操作方法。屬性方法在框架中支持屬性的擴展查詢,在上例中,可以把條件語句改為同時省略查詢條件結果不變。 本文描述了PHP-Phalcon框架中數據庫操作方法,主要討論Phalcon框架的Model組件中的操作方法。更詳細的Model介紹請參考:官方文檔 1. 連接數據庫 在Phalcon框架中,通過在DI中注入db參數來實現數據庫的...
摘要:幫助你開始使用的簡易指南。第一種方式參考第二種方式參考使用參考簡單粗暴的理解是把下的對應成數據庫的表,類屬性對應表字段。 幫助你開始使用 phalcon 的簡易指南。 簡介 Phalcon 2將于2015年4月17日發布,這個版本大約85%的代碼是基于 Zephir 語言重寫的。Zephir是開源的,使用類似PHP語法的語言,生成C語言代碼,并編譯成PHP擴展。這提高了PHP擴展的開發...
閱讀 882·2021-11-23 09:51
閱讀 1089·2021-11-15 17:57
閱讀 1667·2021-09-22 15:24
閱讀 812·2021-09-07 09:59
閱讀 2221·2019-08-29 15:10
閱讀 1849·2019-08-29 12:47
閱讀 751·2019-08-29 12:30
閱讀 3369·2019-08-26 13:51