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