来到新公司已经一月有余了,要构建的厂商平台程序也到了要考虑实际运行环境的阶段了,于是把半成品上传到服务器上。
服务器的系统是 Windows 2000 Server,Web Server 是 IIS5,之前的 PHP 是 4.3.6,没有 URLRewriter 模块。
程序用的 MVC 框架是 Zend Framework,需要 URLRewrite,所以下载了几个,但都不是太好,Zend 都无法得到重写前的请求地址。
于是,就要抉择是自己写一个接收请求的框架,还是把 IIS 换成 Apache。
最后还是决定自己写一个三个文件的简单框架,虽然实现的不是伪静态化,但只会有一个 URL 的参数,URL 的格式是这样的:do.php?o=控制器名/动作名[/参数1/值[/参数2/值...]]。其中前面的文件名与参数名都可以自己定义。
框架的三个文件分别是:
Dispatcher.php:分发器,在 do.php 里调用它,模拟的是 Zend 里的 FrontDispatcher,它去分析指定的参数,调用参数中指定的控制器中的指定的动作名。与 Zend 相同,控制器类的文件与类名都要包含 Controller 后缀,动作名要有 Action 后缀,不同的是,动作方法得接收一个参数,这个参数就是请求对象,包含着所有请求的参数,这样就可以让控制器成为 POPO(Plane old PHP Object,借用 POJO 的概念)。
Request.php:Dispatcher 传给控制器动作的参数。
Action.php:暂时无用,一开始打算让控制器都继承它,但发现用 Request 传参数是更好的主意。
框架的事就此告一段落。
————————————————————————————————
至于文章标题中还有个 Smarty,是因为这个项目是我做的第一个用 Smarty 作为表现层的大型一点的项目,之前在漫点上用 Smarty 做漫画列表页,以及前几天尝试着用它做漫画内容页(仅仅是尝试,发现用 memcached 的性能达不到要求,在一台性能不太高的电脑上只能达到并发访问 30 个请求,40 个请求就只有一半左右的成功率了,而且 CPU 占用率太高,最后还是决定使用静态文件),那些都只是小项目。
Smarty 速度不错,毕竟最后运行时运行的是 PHP 程序。而且语法也比较容易,关键是可以执行 PHP 语句,这样可以弥补模板语法的不足,比如模板中只有遍历数组的循环,而没有普通的数值增量的循环,这样在做分页时显示页码就不太方便,之前的做法是先在控制器里准备一个数组,在模板里循环显示,而用模板里的 PHP 代码就可以这么写:
{{php}}
//取得分配给 Smarty 的模板变量
$page = &$this->_tpl_vars['page'];
$pageMax = &$this->_tpl_vars['pageMax'];
for($i = $page > 5? $page - 5 : 0; $i < $pageMax && $i < $page + 5; $i ++){
...
}
{{/php}}

评论