摘要:是所用的框架,本文將介紹如何用這個(gè)框架寫(xiě)一個(gè)程序。在目錄下建立目錄,并在其中創(chuàng)建文件首先我們定義一個(gè)命名空間,我們的程序使用為命名空間。入口程序這樣基本上就完成了。會(huì)自動(dòng)在目錄下找模板文件,約定大于配置。
Typecho Framework是SegmentFault所用的框架,本文將介紹如何用這個(gè)框架寫(xiě)一個(gè)Hello World程序。如果你不了解Typecho Framework,請(qǐng)先看這篇簡(jiǎn)介。
輸出Hello World!首先我們創(chuàng)建Hello World程序的目錄:
mkdir ~/hellow-world
Typecho Framework簡(jiǎn)介中提到
Action從Service獲取所需數(shù)據(jù)后,傳遞result給Server的響應(yīng)對(duì)象。
Hello World!不需要獲取數(shù)據(jù),所以我們直接讓Action返回一個(gè)result即可。
在hello-world目錄下建立app/Action/目錄,并在其中創(chuàng)建Hello.php文件:
namespace HelloAction;
首先我們定義一個(gè)命名空間,我們的程序使用Hello為命名空間。
這是一個(gè)Action,所以我們需要繼承Action的類(lèi),翻一下框架的源代碼,找到這樣一個(gè)文件Mvc/Action/AbstractAction.php,那我們就繼承AbstractAction這個(gè)類(lèi)好了:
use TEMvcActionAbstractAction; /** * Hello * * @use AbstractAction */ class Hello extends AbstractAction { // 待填充 }
我們看到Mvc/Action/AbstractAction.php里有這樣一行代碼:
abstract public function execute();
這就告訴我們,需要在自己的類(lèi)中實(shí)現(xiàn)這個(gè)execute方法。我們實(shí)現(xiàn)一下這個(gè)方法,返回一個(gè)result數(shù)組。這時(shí)我們參考下Typecho Framework的示例代碼,發(fā)現(xiàn)它是這么寫(xiě)的:
public function execute() { // 只要你把Action的屬性設(shè)置為public狀態(tài),它就會(huì)被注入到模板中,你可以直接在模板中使用它們 $this->word = "Hello World"; $this->peoples = new People($this->peopleService->listNewest(1, 20)); $this->master = new People($this->peopleService->getByName("joyqi")); // 不論你取出一行還是多行數(shù)據(jù),都可以塞到Data對(duì)象中進(jìn)行處理 return array("template", "index.php"); }
嗯,看這行代碼的意思,應(yīng)該是指定返回的result使用模板(index.php是模板文件的名稱)。那么我們不用模板,直接返回一個(gè)字符串應(yīng)該怎么寫(xiě)呢?
繼續(xù)翻源代碼,發(fā)現(xiàn)Mvc/View目錄下是這樣的結(jié)構(gòu):
AbstractView.php
Back.php
Blank.php
Content.php
Error.php
Json.php
Jsonp.php
NotFound.php
Redirect.php
Template.php
嗯,我們返回Hello World!,不用模板,也不用什么Json,那么應(yīng)該是Content了。點(diǎn)進(jìn)去一看,果然是這個(gè):
/** * 渲染一個(gè)字符串 *
好了,知道了result數(shù)組要用content后,我們來(lái)完成這個(gè)方法的定義:
class Hello extends AbstractAction { public function execute() { return array("content", "Hello World!"); } }路由
好了,Action部分已經(jīng)搞定,接下來(lái)我們綁定一下路由。參考示例代碼,我們新建一個(gè)config目錄,然后創(chuàng)建routes.php,內(nèi)容如下:
return [ "/Hello" => "HelloActionHello", ];
路由設(shè)置很簡(jiǎn)單,就是返回一個(gè)數(shù)組,將路徑綁定到相應(yīng)的類(lèi)。
入口程序這樣基本上就完成了。還剩下一個(gè)入口程序了。示例代碼的README中提到:
直接在瀏覽器里輸入http://app-root/portal/index.php即可, 其中app-root是你的程序目錄
所以說(shuō)portal/index.php就是入口程序。這里我們直接在hello-world目錄下面創(chuàng)立一個(gè)index.php文件作為入口,參考示例程序的寫(xiě)法,我們的文件內(nèi)容如下:
const ROOT = __DIR__; require_once ROOT . "/typecho/Helper/Autoloader.php";
首先我們加載Autoloader,通過(guò)這個(gè)Autoloader來(lái)初始化程序:
use TEHelperAutoloader; use TEMvcBase; use TEMvcServerHttpServer; use TEMvcRouterSimple; Autoloader::registerNamespace(ROOT . "/typecho", "TE"); Autoloader::registerNamespace(ROOT . "/app", "Hello");
注冊(cè)命名空間,第一個(gè)參數(shù)是路徑,第二個(gè)參數(shù)是命名空間的名稱。
我們把框架放在typecho目錄下。如果你還沒(méi)有下載框架代碼,可以克隆一下倉(cāng)庫(kù):
cd ~/hello-world git clone https://github.com/typecho/framework typecho
new Server(new Simple(require(ROOT . "/config/routes.php")));
啟動(dòng)服務(wù),指定配置文件的路徑。
然后在hello-world目錄下運(yùn)行:
php -S 127.0.0.1:8000/Hello
訪問(wèn) http://127.0.0.1:8000,發(fā)現(xiàn)有問(wèn)題,說(shuō)是Server需要兩個(gè)參數(shù),現(xiàn)在只有一個(gè),缺少了一個(gè)InterceptorManager。
缺的是攔截器,所以我們就把上面的代碼改一下:
new Server(new Simple(require(ROOT . "/config/routes.php")), new InterceptorManager(require(ROOT . "/config/interceptors.php")));
然后config/interceptors.php里返回一個(gè)空數(shù)組(因?yàn)槲覀儸F(xiàn)在不需要用到攔截器):
return array();
大功告成!訪問(wèn) http://127.0.0.1:8000/Hello 就能看到輸出的 Hello world!
模板上面是直接輸出字符串,接下來(lái)我們使用模板輸出.
先在路由里增加一條:
return [ "/Hello" => "HelloActionHello", "/Hi" => "HelloActionHi" ];
我們打算訪問(wèn)/Hi通過(guò)模板輸出。
然后是實(shí)現(xiàn)Hi類(lèi),創(chuàng)建app/Action/Hi.php,內(nèi)容如下:
namespace HelloAction; use TEMvcActionAbstractAction; /** * Hi * * @use AbstractAction */ class Hi extends AbstractAction { public function execute() { $this->msg = "Hi!"; return array("template", "hi.php"); } }
我們定義了$this->msg,在模板中可以直接使用這個(gè)變量。
最后是定義hi.php模板。我們創(chuàng)建一個(gè)template目錄:
mkdir ~/hello-world/template
然后創(chuàng)建一個(gè)hi.php模板文件,直接在HTML中嵌入PHP代碼:
注意,我們并沒(méi)有指定模板文件的位置!如果你把模板文件放在別的目錄下,會(huì)報(bào)錯(cuò)Template file not found。Typecho Framework會(huì)自動(dòng)在template目錄下找模板文件,“約定大于配置”。
撰文 SegmentFault
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/20671.html
摘要:是寫(xiě)的一個(gè)框架。據(jù)說(shuō)是參考了的思想。要先頁(yè)面上顯示我們還需要寫(xiě)一下路由。打開(kāi)由于中有用到數(shù)據(jù)庫(kù),我們先注釋掉。文件中注釋這行。然后這樣可以通過(guò)訪問(wèn)看到輸出了。 typecho framework是70寫(xiě)的一個(gè)框架。據(jù)說(shuō)是參考了java的思想。 項(xiàng)目地址:https://github.com/typecho/framework 參考項(xiàng)目:https://github.com/typec...
摘要:代碼已經(jīng)開(kāi)源,本文簡(jiǎn)單介紹,希望能幫助了解。數(shù)據(jù)庫(kù)的適配器,支持。請(qǐng)求由容器處理,容器中包括請(qǐng)求響應(yīng)路由攔截器等對(duì)象。收到請(qǐng)求后,會(huì)生成相應(yīng)的請(qǐng)求和響應(yīng)對(duì)象,以注入的方式傳給。從獲取所需數(shù)據(jù)后,傳遞給的響應(yīng)對(duì)象。 Typecho Framework是SegmentFault所用的框架,由創(chuàng)始人joyqi親手打造。joyqi也是國(guó)內(nèi)知名博客平臺(tái)Typecho的作者。 Typecho F...
摘要:注入是的重要特性。注入寫(xiě)起來(lái)非常優(yōu)雅,在性能上也有好處避免了函數(shù)開(kāi)銷(xiāo)。本文簡(jiǎn)要介紹如何使用的注入。如果你不太了解,請(qǐng)先參考簡(jiǎn)介和兩篇文章。注入的使用十分簡(jiǎn)單。中需要自動(dòng)提示的話,需要額外使用注明。感謝提供這個(gè)小竅門(mén)。 注入是Typecho-Framewrok的重要特性。注入寫(xiě)起來(lái)非常優(yōu)雅,在性能上也有好處(避免了函數(shù)開(kāi)銷(xiāo))。本文簡(jiǎn)要介紹如何使用Typecho-Framework的注入。...
摘要:看起來(lái)很簡(jiǎn)單吧其實(shí)里面還是有不少坑的。激活插件方法如果激活失敗直接拋出異常禁用插件方法如果禁用失敗直接拋出異常獲取插件配置面板配置面板個(gè)人用戶的配置面板插件實(shí)現(xiàn)方法插件流程插件的基本流程是這樣的。下一節(jié)老高會(huì)更詳細(xì)的說(shuō)明插件類(lèi)的方法。 最近老高正在編寫(xiě)一個(gè)關(guān)于typecho的插件,由于typecho不像wordpress,有那么多的文檔參考,寫(xiě)一個(gè)插件還是遇到了很多的坑,不過(guò)隨著研究的...
摘要:功能是個(gè)好功能,但是在下載的插件包中發(fā)現(xiàn)了一些,而且在使用步驟以及文件注釋中作者并沒(méi)有提及這些,想聯(lián)系作者,但是始終找不到作者的聯(lián)系方式,那只有自己修改了。資源優(yōu)化之后的插件包,點(diǎn)我下載 showImg(https://segmentfault.com/img/remote/1460000010745407); 原文是在我自己博客中,小伙伴也可以點(diǎn)閱讀原文進(jìn)行跳轉(zhuǎn)查看,還有好聽(tīng)的背景...
閱讀 2024·2021-09-30 09:47
閱讀 703·2021-09-22 15:43
閱讀 1981·2019-08-30 15:52
閱讀 2431·2019-08-30 15:52
閱讀 2540·2019-08-30 15:44
閱讀 903·2019-08-30 11:10
閱讀 3372·2019-08-29 16:21
閱讀 3296·2019-08-29 12:19