目前所有流行的PHP框架都使用自己的视图层实现,这是基于纯PHP模板和大量助手的。我尝试了其中的一些方法,总是发现这种方法给非常简单的事情带来了巨大的复杂性。例如,在Zend Framework中,表单和分页使用自己的解决方案来定制这些项的外观。帮助器重新发明循环,也提供了相当慢的解决方案,在我看来,整个视图层并不是作为一个部分存在的,但它的许多功能被委托给脚本的其他部分。在Symfony和admin生成器中也出现了相同的配置问题,在Kohana中,我被迫在所有表单中复制相同的代码。PHP真的是视图层的好选择吗?你是否也发现这些实现不方便,或者,为什么尽管有这些问题,它们仍然很好,并且不能被替换,例如智能模板引擎(我不是指Smarty:)?
发布于 2009-03-28 08:06:20
现在我喜欢PHP,但归根结底,最重要的是,它是一种模板语言,而不是通用编程语言nor an object-oriented language。不要抗拒它。拥抱它。
我已经研究了一些不同的MVC框架,比如Symfony、CakePHP和Zend,我很难理解这些示例。它们通常是“有了这17个文件,你就可以制作一个'Hello world‘程序!”嗯?!?!
有这样一件事,就是为了复杂,在你有问题之前解决问题,我还不相信这些重量级(它们是是重量级)框架真的增加了价值。
我更喜欢'no framework' framework。这真的是“你自己的”,但我认为它会带来最精简、最干净的最终结果。
我对Smarty也有类似的感觉。很多人都是Smarty的铁杆粉丝,但我不明白为什么你要把模板语言添加到你的……模板语言。
最终,我最终在大多数情况下编写了这种PHP脚本
<?
require 'config.h'; // set up constants, DB connections and so on
page_header('My Page'); // page header, site menu and so on
deny_unregistered(); // security
if (/* user submitted page */) {
$valid = validate_form(/* validation rules */);
if ($valid === true) {
// do db changes
// redirect user ie POST+REDIRECT+GET
} else {
// output error messages
}
}
?>
// display page
<? page_footer(); ?>通过巧妙地使用助手函数(例如分页链接),上面的代码非常容易阅读和调试。我也更喜欢它而不是这个模型:
网址: /index.php?inc=blah
index.php:
<?
require "$inc.php"; // hopefully you sanitize this but so many don't
?>我发现这很难看,容易出错,甚至是危险的。我有一个PHP文件的层次结构,它反映了站点结构(从菜单的角度来看),其中每个页面都是一个PHP脚本。如果他们有共同的行为,他们都需要(,它通常被用来作为糟糕组织的黑客)。
简单,容易,容易理解,直截了当。
似乎很多程序员会在真正有任何需要之前就把一个框架扔进混合体中。我认为这是一种相当懒惰的做法,而且代价很大:今天做出的每一个决定都是以后很难改变的,所以尽可能推迟做出这样的决定。以后引入一些东西比现在引入一些东西更容易,发现它并没有真正做你想要的事情,然后稍后再改变它。
发布于 2009-03-28 07:52:53
还有其他几个模板引擎。然而,我总是发现纯php是最方便的。我只是觉得这样更舒服些。
我不喜欢ZF中的视图助手的一点是,它通常会让我的代码更臃肿,而不是更整洁。我特别讨论的是$this->url()助手:)
https://stackoverflow.com/questions/692379
复制相似问题