Php 为什么Zend框架如此流行?

Php 为什么Zend框架如此流行?,php,zend-framework,Php,Zend Framework,我不是巨魔,我的目标不是发动一场火焰战;我也无意不尊重Zend框架的作者:其中有很多优秀的作品。但是我有一项工作要做,我很难调和ZF的流行与用它构建应用程序的现实。我很想从其他人那里了解他们为什么使用Zend框架 我对PHP世界相当陌生,但我用多种语言做过很多编程。在阅读了许多教程并在其中构建了几个应用程序之后,我觉得一些核心Zend Framework工具就像是alpha代码。对我来说,下面的基本弱点,除了其他之外,似乎太过难以考虑使用它来部署应用程序了。但是,一次又一次地,ZF被认为是其中的

我不是巨魔,我的目标不是发动一场火焰战;我也无意不尊重Zend框架的作者:其中有很多优秀的作品。但是我有一项工作要做,我很难调和ZF的流行与用它构建应用程序的现实。我很想从其他人那里了解他们为什么使用Zend框架

我对PHP世界相当陌生,但我用多种语言做过很多编程。在阅读了许多教程并在其中构建了几个应用程序之后,我觉得一些核心Zend Framework工具就像是alpha代码。对我来说,下面的基本弱点,除了其他之外,似乎太过难以考虑使用它来部署应用程序了。但是,一次又一次地,ZF被认为是其中的一个,如果不是领先的框架。 首先让我说,我发现采埃孚的大部分功能是可行的。路由工作正常,布局工具是可用的(尽管与JSP/ASP等模板系统有很大不同),缓存工具也是可用的。社区中似乎有一种趋势,即填充大量的建模(例如验证)和视图逻辑(例如$this->headScript()-为什么我的控制器必须关心我的视图需要哪个js文件?)

现在谈谈我在使用它的短短时间里遇到的几个非常严重(IMO)的弱点。如果我继续用它来建设,我会不寒而栗地想象未来我将发现的其他领域

1。表单布局
许多人似乎对表单布局缺乏控制感到不满。在构建一个简单表单需要进行大量讨论的情况下,您如何拥有一个流行的框架? 和

2。身份验证/授权
似乎没有人真正理解如何简单地执行例行身份验证/授权。人们(包括你的家人)正在努力实现简单的访问控制。此外,该方法似乎依靠序列化来实现持久性,而不是传统的用户和权限数据库存储。 , , . 伙计们,这工作太多了


我感觉到的弱点不是真的,或者说不是问题?为什么?为什么选择Zend框架(或不选择)?您是否发现有其他方面会让您感到非常痛苦,以至于您想放弃采埃孚而采用另一种方法?感谢您的意见。

采埃孚的一个主要优点是,您可以使用采埃孚的任何一个组件,轻松地将其与您自己(或第三方)的框架连接起来,只需很少的修改。

因为他们擅长营销。


Zend的创始人Andi Gutmans和Zeev Suraski是PHP的关键贡献者

他们有一个最完整的php框架

当你想到它时;就像说:

“我们的语言性能不如预期,因此我们制作了一个带有缓存的框架,使其速度更快”


  • Zend提供的大部分功能都可以实现 没有Zend
  • 但是Zend的方案是非常好的 “一体式”分发
  • 他们提供认证和培训

构建中型应用程序的简单性。 在ZF之前,您必须构建自己的“框架”来开发中型应用程序。现在要简单得多

我不认为解耦和可以独立使用的简单元素是成功的关键。是一个不错的功能,但不是经常使用

支持社区规模e与其他框架的平衡相关


就速度而言,它们并不比其他框架好。

我没有选择Zend框架,因为在我评估PHP框架时,它还不是一个完整的、集成的、足以构建web应用程序的解决方案。我选择了,从那以后,我就再也不需要换别的了


我不确定现在它是否相同,但我一直认为ZF是一个组件库,而不是一个框架。框架有更严格的做事规则,通常有更好的集成支持工具来帮助人们做事。在这方面,组件库比较松散。当框架规则符合框架领域中大多数应用程序的需求时,我本人显然更喜欢这种解决方案。对我来说,symfony就是这样。我确实会根据需要使用某些ZF组件,但我的项目从不基于ZF本身。

ZF是一个很好的起点。我使用zend_工具为我的中型应用程序生成了一个MVC框架,并使用了许多其他组件(zend_缓存、电子邮件、翻译、表单、会话)

我同意,如果你想像Zend说的那样,和装饰师一起做,表单布局是复杂的。有一些方法可以在自定义布局中使用Zend_表单元素并进行验证,而无需装饰器

我对Zend cookie的体验很糟糕-我只是无法为我的整个域设置cookie。老好人塞特库奇做得对

关于Acl——同样,Zend文档和Zend_Acl中的示例有时效果不佳。我使用控制器插件方法和我自己的“基于角色的资源管理”来控制权限

我甚至没有尝试Zend Data Gateway使用的原则(我想这是因为我喜欢nHibernate:),连接原则非常简单


我认为ZF很好,因为你可以随心所欲地使用它。我认为使用其他一些框架会更加困难。

表单:decorator方法很复杂,但对于具有许多表单的应用程序来说,它是防弹的,而且价格昂贵。你不在乎你的表单中有10个或25个条目,样式总是一样的。当您知道如何使用它时,可以为您节省大量工作。 对于思想和目标更简单的用户,始终有viewScript装饰器;)

Auth/Acl:从来没有
Zend_Auth::getInstance()->hasIdentity() //logged in
Zend_Auth::getInstance()->getIdentity()->role; //returns admin
$acl->isAllowed($who,  $where, $what);
$acl->isAllowed('roleAdmin', 'resourcePosts', 'create'); //returns true
$acl->isAllowed('roleAdmin', $module.ucfirst($controller), $action); //returns true
$acl->isAllowed('roleAdmin', 'adminPosts', 'create'); //returns true
$text = new Zend_Form_Element_Text('text');
$text->addValidator('NotEmpty')->setRequired();
$submit = new Zend_Form_Element_Submit('submit');
<form>
<input type="text" id="text" name="text" />
<input type="submit" id="submit" name="submit" value="Send" />
</form>
$form = new Form_Whatever();
if ($this->_request->isPost()) {
    if ($form->isValid($this->_request->getPost()) {
        // code
    }
}
public function indexAction()
    {
        $this->view->title = 'Search Results';

        $filters = array('q' => array('StringTrim' , 'StripTags'));
        $validators = array('q' => array('presence' => 'required'));

        $input = new Zend_Filter_Input($filters, $validators, $_GET);

        if ($input->isValid()) {
            $this->view->messages = '';
            $q = $input->getEscaped('q');
            $this->view->q = $q;

            // do search
            try {
                $index = News_Search_Lucene::open(
                    SearchIndexer::getIndexDirectory());

                $results = $index->find($q);
            } catch (Exception $e) {
                $results = array();
            }

            $this->view->results = $results;

        } else {
            $this->view->messages = $input->getMessages();
        }
    }