资讯专栏INFORMATION COLUMN

Typecho Framework: Hello world!

fish / 1107人阅读

摘要:是所用的框架,本文将介绍如何用这个框架写一个程序。在目录下建立目录,并在其中创建文件首先我们定义一个命名空间,我们的程序使用为命名空间。入口程序这样基本上就完成了。会自动在目录下找模板文件,约定大于配置。

Typecho Framework是SegmentFault所用的框架,本文将介绍如何用这个框架写一个Hello World程序。如果你不了解Typecho Framework,请先看这篇简介。

输出Hello World!

首先我们创建Hello World程序的目录:

mkdir ~/hellow-world

Typecho Framework简介中提到

  

Action从Service获取所需数据后,传递result给Server的响应对象。

Hello World!不需要获取数据,所以我们直接让Action返回一个result即可。

在hello-world目录下建立app/Action/目录,并在其中创建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();

这就告诉我们,需要在自己的类中实现这个execute方法。我们实现一下这个方法,返回一个result数组。这时我们参考下Typecho Framework的示例代码,发现它是这么写的:

public function execute()
    {
        // 只要你把Action的属性设置为public状态,它就会被注入到模板中,你可以直接在模板中使用它们
        $this->word = "Hello World";
        $this->peoples = new People($this->peopleService->listNewest(1, 20));
        $this->master = new People($this->peopleService->getByName("joyqi"));   // 不论你取出一行还是多行数据,都可以塞到Data对象中进行处理

        return array("template", "index.php");
    }

嗯,看这行代码的意思,应该是指定返回的result使用模板(index.php是模板文件的名称)。那么我们不用模板,直接返回一个字符串应该怎么写呢?

继续翻源代码,发现Mvc/View目录下是这样的结构:

AbstractView.php

Back.php

Blank.php

Content.php

Error.php

Json.php

Jsonp.php

NotFound.php

Redirect.php

Template.php

嗯,我们返回Hello World!,不用模板,也不用什么Json,那么应该是Content了。点进去一看,果然是这个:

/**
 * 渲染一个字符串
 * 

好了,知道了result数组要用content后,我们来完成这个方法的定义:

class Hello extends AbstractAction
{
  public function execute()
  {
    return array("content", "Hello World!");
  }
}
路由

好了,Action部分已经搞定,接下来我们绑定一下路由。参考示例代码,我们新建一个config目录,然后创建routes.php,内容如下:


return [ "/Hello" => "HelloActionHello", ];

路由设置很简单,就是返回一个数组,将路径绑定到相应的类。

入口程序

这样基本上就完成了。还剩下一个入口程序了。示例代码的README中提到:

  

直接在浏览器里输入http://app-root/portal/index.php即可, 其中app-root是你的程序目录

所以说portal/index.php就是入口程序。这里我们直接在hello-world目录下面创立一个index.php文件作为入口,参考示例程序的写法,我们的文件内容如下:

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");

注册命名空间,第一个参数是路径,第二个参数是命名空间的名称。

我们把框架放在typecho目录下。如果你还没有下载框架代码,可以克隆一下仓库:

cd ~/hello-world
git clone https://github.com/typecho/framework typecho
new Server(new Simple(require(ROOT . "/config/routes.php")));

启动服务,指定配置文件的路径。

然后在hello-world目录下运行:

php -S 127.0.0.1:8000/Hello 

访问 http://127.0.0.1:8000,发现有问题,说是Server需要两个参数,现在只有一个,缺少了一个InterceptorManager

缺的是拦截器,所以我们就把上面的代码改一下:

new Server(new Simple(require(ROOT . "/config/routes.php")),
  new InterceptorManager(require(ROOT . "/config/interceptors.php")));

然后config/interceptors.php里返回一个空数组(因为我们现在不需要用到拦截器):

return array();

大功告成!访问 http://127.0.0.1:8000/Hello 就能看到输出的 Hello world!

模板

上面是直接输出字符串,接下来我们使用模板输出.

先在路由里增加一条:

return [
  "/Hello" => "HelloActionHello",
  "/Hi" => "HelloActionHi"
];

我们打算访问/Hi通过模板输出。

然后是实现Hi类,创建app/Action/Hi.php,内容如下:

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模板。我们创建一个template目录:

mkdir ~/hello-world/template

然后创建一个hi.php模板文件,直接在HTML中嵌入PHP代码:

注意,我们并没有指定模板文件的位置!如果你把模板文件放在别的目录下,会报错Template file not found。Typecho Framework会自动在template目录下找模板文件,“约定大于配置”。


撰文 SegmentFault

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/20671.html

相关文章

  • typecho framework初步学习

    摘要:是写的一个框架。据说是参考了的思想。要先页面上显示我们还需要写一下路由。打开由于中有用到数据库,我们先注释掉。文件中注释这行。然后这样可以通过访问看到输出了。 typecho framework是70写的一个框架。据说是参考了java的思想。 项目地址:https://github.com/typecho/framework 参考项目:https://github.com/typec...

    liangzai_cool 评论0 收藏0
  • Typecho Framework简介

    摘要:代码已经开源,本文简单介绍,希望能帮助了解。数据库的适配器,支持。请求由容器处理,容器中包括请求响应路由拦截器等对象。收到请求后,会生成相应的请求和响应对象,以注入的方式传给。从获取所需数据后,传递给的响应对象。 Typecho Framework是SegmentFault所用的框架,由创始人joyqi亲手打造。joyqi也是国内知名博客平台Typecho的作者。 Typecho F...

    lily_wang 评论0 收藏0
  • Typecho Framework 注入简介

    摘要:注入是的重要特性。注入写起来非常优雅,在性能上也有好处避免了函数开销。本文简要介绍如何使用的注入。如果你不太了解,请先参考简介和两篇文章。注入的使用十分简单。中需要自动提示的话,需要额外使用注明。感谢提供这个小窍门。 注入是Typecho-Framewrok的重要特性。注入写起来非常优雅,在性能上也有好处(避免了函数开销)。本文简要介绍如何使用Typecho-Framework的注入。...

    Jason_Geng 评论0 收藏0
  • typecho插件编写教程1 - 从HelloWorld说起

    摘要:看起来很简单吧其实里面还是有不少坑的。激活插件方法如果激活失败直接抛出异常禁用插件方法如果禁用失败直接抛出异常获取插件配置面板配置面板个人用户的配置面板插件实现方法插件流程插件的基本流程是这样的。下一节老高会更详细的说明插件类的方法。 最近老高正在编写一个关于typecho的插件,由于typecho不像wordpress,有那么多的文档参考,写一个插件还是遇到了很多的坑,不过随着研究的...

    yintaolaowanzi 评论0 收藏0
  • TypechoHelloChangYan》插件500错误以及优化

    摘要:功能是个好功能,但是在下载的插件包中发现了一些,而且在使用步骤以及文件注释中作者并没有提及这些,想联系作者,但是始终找不到作者的联系方式,那只有自己修改了。资源优化之后的插件包,点我下载 showImg(https://segmentfault.com/img/remote/1460000010745407); 原文是在我自己博客中,小伙伴也可以点阅读原文进行跳转查看,还有好听的背景...

    zhaochunqi 评论0 收藏0

发表评论

0条评论

fish

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<