成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

phalcon使用經(jīng)驗(yàn)雜談

UsherChen / 1971人閱讀

摘要:初次認(rèn)識(shí)是在剛學(xué)的時(shí)候最近終于有機(jī)會(huì)用上了故此說(shuō)說(shuō)使用上的一些感受個(gè)人是很喜歡這套框架的方式使用依賴注入讓代碼組織很靈活耦合也很低但是也許是框架東西太多了遇到幾個(gè)坑上一年以上的也還沒解決不過(guò)有一定開發(fā)經(jīng)驗(yàn)的話還是可以自己修復(fù)的被這幾個(gè)坑浪費(fèi)

初次認(rèn)識(shí)phalcon是在剛學(xué)php的時(shí)候,最近終于有機(jī)會(huì)用上了.故此說(shuō)說(shuō)使用上的一些感受

個(gè)人是很喜歡phalcon這套框架的方式,使用依賴注入,讓代碼組織很靈活,耦合也很低.但是,也許是框架東西太多了,遇到幾個(gè)坑. github上一年以上的issue也還沒解決.不過(guò)有一定開發(fā)經(jīng)驗(yàn)的話,還是可以自己修復(fù)的.被這幾個(gè)坑浪費(fèi)了不少時(shí)間....

第一個(gè)是view.
   phalcon的view,可以分成兩大部分,一是全局的layout,二是controller/action的部分,
   讓使用時(shí)更加方便,設(shè)置好layout后,只關(guān)注controller部分的view即可.
   但是關(guān)于view的路徑設(shè)置問(wèn)題,要關(guān)注這幾個(gè)參數(shù)


MainView(主layout文件路徑+文件名,但不包括擴(kuò)展名,擴(kuò)展名是在注入視圖引擎時(shí)的key鍵值),

LayoutsDir(layouts的目錄路徑),

Layout(主layout文件名,可根據(jù)需求,動(dòng)態(tài)使用layouts目錄下的某個(gè)文件充當(dāng)mainView),

PartialsDir(使用partial函數(shù)時(shí),查找模板文件,如partial("main/header") 則查找路徑是"/你的partialsDir/main/header.volt" . ),

ViewsDir(設(shè)置controller/action對(duì)應(yīng)的模板文件所在的目錄.和partialDir類似,自動(dòng)查找目錄下的模板文件)

BasePath(視圖的目錄的基礎(chǔ)目錄,phalcon和根據(jù)所有設(shè)置的dir來(lái)組合路徑,查找模板文件,坑就是這了)

我剛開始用這個(gè)view的時(shí)候,使用的是絕對(duì)路徑,因?yàn)榻^對(duì)路徑配置和管理比較方便.
然后我就被坑了.浪費(fèi)了一個(gè)下午的時(shí)間調(diào)試.
根據(jù)官方文檔給出的例子反復(fù)測(cè)試,發(fā)現(xiàn)這個(gè)view組件只能使用相對(duì)路徑設(shè)置路徑,BasePath不用設(shè)置.

一氣之下就去翻phalcon的源碼了.開發(fā)語(yǔ)言是Zephir,phalcon團(tuán)隊(duì)自己開發(fā)的語(yǔ)言.
語(yǔ)言語(yǔ)法比較簡(jiǎn)單,容易懂.然后看到了這句.

..]

看起來(lái)像是沒有判斷是相對(duì)路徑還是絕對(duì)路徑,直接組合起來(lái)了而已的,猜測(cè)是這里引發(fā)了問(wèn)題.
并且是直接按順序解析action , layout , main layout這些模板文件.
于是想驗(yàn)證一下.所以我寫了幾個(gè)調(diào)試文件,打算調(diào)試一下.
翻查phalcon源碼過(guò)程省略1000字...找到必然會(huì)調(diào)用,并有路徑處理的幾個(gè)主要方法,繼承View相關(guān)的幾個(gè)class

這里也強(qiáng)調(diào)下,很多人喜歡用echo,一般情況是沒問(wèn)題,
但最好還是用文件記錄吧,因?yàn)閑cho局限性其實(shí)挺大的,
你不知道echo buff什么時(shí)候打開,什么時(shí)候關(guān)閉..使用文件來(lái)記錄log最保險(xiǎn)了.

我測(cè)試的代碼,使用多模塊的方式.

BaseView文件,繼承phalcon的view,并且打開這個(gè)方法的報(bào)錯(cuò)信息

BaseVolt文件,繼承模板引擎volt

view注入代碼,和目錄結(jié)構(gòu)如圖

?log記錄如下

頁(yè)面輸出如下:

跟想像的一樣,使用絕對(duì)路徑時(shí),無(wú)論如何,phalcon都是直接拼接以上設(shè)置的路徑,
當(dāng)開發(fā)者想動(dòng)態(tài)使用controller/action的view,但layouts主目錄又在上層目錄時(shí),就會(huì)出問(wèn)題.
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模板文件就不起作用了..........

所以,真的就只是直接組合三個(gè)路徑而已..所以,在設(shè)置路徑的時(shí)候,就看自己的取舍了.

phalcon view源碼里三個(gè)變量中,basePath,viewDir(關(guān)鍵就是作者對(duì)viewDir這個(gè)變量理解有誤,導(dǎo)致的bug) 看成是基礎(chǔ)的路徑. viewPath是依次執(zhí)行_enginrender時(shí)的action view,layout view ,main view的路徑.
理解了這個(gè)就可以自己慢慢設(shè)置好了路徑了.....

解決辦法有三個(gè).

一 是自己寫個(gè)View繼承phalcon的View,處理路徑. 思路是除了action的定位外,其他定位將viewDir變?yōu)榭?
二 是修改phalcon源碼,再自己編譯一遍(在_enginRender外部處理好路徑定位,去除_enginRender和路徑定位的耦合)
三 是,不管了,直接使用相對(duì)路徑(不設(shè)置basepath,viewsDir因?yàn)橐獎(jiǎng)討B(tài)定位action view,使用絕對(duì)路徑, layoutsDir partialsDir使用相對(duì)路徑)

github上是有人發(fā)過(guò)這個(gè)bug的issue,可是作者沒理會(huì)......

------------------------------華麗分割線------------------------------------

第二是model

還有個(gè)坑,是關(guān)于phalcon的model.一樣是發(fā)了issue,作者沒管.
根據(jù)文檔model是提供了setter 鏈接描述 方法的,可實(shí)際上,setter卻不起作用...

然后像view一樣,自己修復(fù)好...

個(gè)人認(rèn)為setter getter是非常好用的功能,但有些人卻覺得沒用,見仁見智啦.
我們的開發(fā)模式是model和controller 由不同的人開發(fā),有了setter getter,數(shù)據(jù)調(diào)用者只管拿數(shù)據(jù)就可以了,
model數(shù)據(jù)出問(wèn)題,在model中修改即可,controller不需要改動(dòng).工作模式上耦合可以降低很多.


不過(guò)用這個(gè)框架的開發(fā)的項(xiàng)目夭折了,再深入點(diǎn)的坑也遇不到了.沒有意外的話,短期內(nèi)也不會(huì)用了.
最近心情比較糟糕.寫得比較隨便.當(dāng)個(gè)記錄好了.......

最后直接附上 github 源碼,多模塊模式開發(fā)用這樣的目錄結(jié)構(gòu)也是不錯(cuò)的,希望能幫到別人

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21339.html

相關(guān)文章

  • 后端開發(fā)者從零做一個(gè)移動(dòng)應(yīng)用(后端篇)

    摘要:后端開發(fā)的疑惑后端開發(fā)最常面對(duì)的一個(gè)問(wèn)題性能高并發(fā)等等。而到了時(shí)代,在方面有了前后端分離概念移動(dòng)后端更是無(wú)力渲染天然前后端分離。 先來(lái)上一張前端頁(yè)面的效果圖(Vue + Vux + Vuex + Vue-Router)。showImg(https://segmentfault.com/img/remote/1460000010207850); 第一次做gif 沒什么經(jīng)驗(yàn),太大了。加載...

    codergarden 評(píng)論0 收藏0
  • PHP7 安裝Phalcon框架

    摘要:是什么是開源全功能棧使用擴(kuò)展編寫針對(duì)高性能優(yōu)化的框架。也是松耦合的,可以根據(jù)項(xiàng)目的需要任意使用其他對(duì)象。安裝支持版本的不支持普通方式的編譯安裝,只能通過(guò)安裝。因此安裝之前,請(qǐng)先安裝。 Phalcon 是什么? Phalcon 是開源、全功能棧、使用 C 擴(kuò)展編寫、針對(duì)高性能優(yōu)化的 PHP 5 框架。 開發(fā)者不需要學(xué)習(xí)和使用 C 語(yǔ)言的功能, 因?yàn)樗械墓δ芏家?PHP 類的方式暴露出來(lái)...

    kidsamong 評(píng)論0 收藏0
  • Phalcon入門教程之目錄結(jié)構(gòu)

    摘要:原文發(fā)表于入門教程之目錄結(jié)構(gòu)很多初學(xué)的朋友,對(duì)于以框架為基礎(chǔ)構(gòu)建的項(xiàng)目,應(yīng)該如何組織目錄結(jié)構(gòu)有點(diǎn)摸不著頭腦。只需要通過(guò)注冊(cè)這些目錄結(jié)構(gòu),即可正常使用。 原文發(fā)表于:Phalcon入門教程之目錄結(jié)構(gòu) 很多初學(xué)Phalcon的朋友,對(duì)于以Phalcon框架為基礎(chǔ)構(gòu)建的項(xiàng)目,應(yīng)該如何組織目錄結(jié)構(gòu)有點(diǎn)摸不著頭腦。比如多模塊的項(xiàng)目中,如何共用libs類庫(kù)和models目錄中模型類的情況,就有很...

    reclay 評(píng)論0 收藏0
  • PHP-Phalcon框架中的數(shù)據(jù)庫(kù)操作

    摘要:本文描述了框架中數(shù)據(jù)庫(kù)操作方法,主要討論框架的組件中的操作方法。屬性方法在框架中支持屬性的擴(kuò)展查詢,在上例中,可以把條件語(yǔ)句改為同時(shí)省略查詢條件結(jié)果不變。 本文描述了PHP-Phalcon框架中數(shù)據(jù)庫(kù)操作方法,主要討論P(yáng)halcon框架的Model組件中的操作方法。更詳細(xì)的Model介紹請(qǐng)參考:官方文檔 1. 連接數(shù)據(jù)庫(kù) 在Phalcon框架中,通過(guò)在DI中注入db參數(shù)來(lái)實(shí)現(xiàn)數(shù)據(jù)庫(kù)的...

    xiaotianyi 評(píng)論0 收藏0
  • phalcon簡(jiǎn)易指南

    摘要:幫助你開始使用的簡(jiǎn)易指南。第一種方式參考第二種方式參考使用參考簡(jiǎn)單粗暴的理解是把下的對(duì)應(yīng)成數(shù)據(jù)庫(kù)的表,類屬性對(duì)應(yīng)表字段。 幫助你開始使用 phalcon 的簡(jiǎn)易指南。 簡(jiǎn)介 Phalcon 2將于2015年4月17日發(fā)布,這個(gè)版本大約85%的代碼是基于 Zephir 語(yǔ)言重寫的。Zephir是開源的,使用類似PHP語(yǔ)法的語(yǔ)言,生成C語(yǔ)言代碼,并編譯成PHP擴(kuò)展。這提高了PHP擴(kuò)展的開發(fā)...

    whataa 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<