为什么Zend Framework如此受欢迎?

时间:2009-12-02 14:14:36

标签: php zend-framework

我不是一个巨魔,我的目标不是开始一场火焰战;我不是不尊重Zend框架的作者:它有很多很好的工作。但是......我有一份工作要完成,而且我很难协调ZF的受欢迎程度与使用它构建应用程序的现实。我真的想知道其他人为什么使用Zend Framework。

我对PHP世界还很陌生,但我已经用很多语言做了很多编程。在阅读了许多教程并在其中构建了几个应用程序后,一些核心Zend Framework工具对我来说就像是alpha代码。对我来说,除了其他方面之外,以下基本弱点似乎太过于无法考虑使用它来部署应用程序 - 但是ZF一再被建议作为其中一个,如果不是 领先框架。

首先让我说我发现ZF的大部分都是可行的。路由工作非常适合,布局工具是可维护的(虽然与模板系统(如JSP / ASP)非常不同),缓存设施等也是如此。社区中似乎有一种趋势,即填充大量建模(例如验证)和查看逻辑(例如$ this-> headScript() - 为什么我的控制器必须关心我的视图需要哪个js文件?)到控制器中但可能是使用问题而不是必然框架的错误。

现在我在短时间内遇到了一些非常严重(IMO)的弱点。如果我继续用它构建,我会想象未来我会发现的其他领域。

1。表格布局
许多人似乎对缺乏对表单布局的控制感到不满。你怎么能有一个流行的框架,构建一个简单的表单需要这么多的讨论? Question 1question 2

2。认证/授权
似乎没有人真正理解如何简单地执行例行认证/授权。人们[包括你的人]真正努力实现简单的访问控制。此外,该方法似乎依赖于持久性的序列化,而不是传统的用户和权限的数据库存储。 A confusing examplea proposal to enhance the facilitya tutorial - part Iand part II。这是太多的工作了!

我认为的弱点不是真实的,或者某种程度上不是问题?为什么或者为什么不?你为什么选择Zend Framework(或不)?您是否发现其他区域如此痛苦以至于您想要将ZF转换为其他方法?感谢您的意见。

13 个答案:

答案 0 :(得分:17)

因为他们擅长营销


  

Zend的创始人Andi Gutmans和Zeev   Suraski是PHP的主要贡献者

他们拥有最完整的php框架之一。

当你想到它;这就像说:

“我们的语言不尽如人意,因此我们制作了一个带缓存的框架,使其更快”

  • Zend提供的大部分内容都可以完成 没有Zend。
  • 但Zend的套餐非常好 “一体化”发行。
  • 他们提供认证和培训。

答案 1 :(得分:15)

ZF的一个主要好处是,您可以使用它的任何一个组件,并轻松地将它们与您自己的(或第三方)框架绑定,并进行最少的修改。

答案 2 :(得分:6)

表单:装饰器方法很复杂,但对于具有多种形式的应用程序而言,它是防弹且无价的。如果表单中有10个或25个项目,则无关紧,样式始终相同。当您知道如何使用它时,可以为您节省大量的工作。 对于思维和目标更简单的用户,始终存在viewScript装饰器;)

Auth / Acl:从未遇到任何问题。

Zend_Auth::getInstance()->hasIdentity() //logged in

Zend_Auth::getInstance()->getIdentity()->role; //returns admin

对于Acl:

$acl->isAllowed($who,  $where, $what);
$acl->isAllowed('roleAdmin', 'resourcePosts', 'create'); //returns true

可以轻松修改以匹配MVC:

$acl->isAllowed('roleAdmin', $module.ucfirst($controller), $action); //returns true
$acl->isAllowed('roleAdmin', 'adminPosts', 'create'); //returns true

答案 3 :(得分:6)

使用ZendFramework为我着色。使用Zend Framework就像将一组训练轮焊接到您的代码中。您可以在Zend Framework中执行的任何操作都可以在原始PHP中执行。 (记住ZF本身是用原始PHP编写的。)而且你通常可以使用相同数量的代码行来完成它 - 以与应用程序其余部分一致的方式编写。而且,通过使用本机PHP代码,您不会被锁定在只有少数PHP开发人员使用的小众工具中。而且您不必担心与ZF版本的更改兼容。

在我的应用程序中,我做了与ZF工具相同的事情,主要是使用已存在多年的简单PHP函数:

  • 验证表单数据
  • 清理表单输入
  • 处理通过表单上传的文件
  • 操纵和比较日期
  • 处理身份验证
  • 发送电子邮件
  • 写入日志文件
  • 从配置文件中读取
  • 读取外部HTTP页面
  • 以JSON和SOAP格式交换
  • 使用第三方API

我无法在Zend Framework中发现任何值得我花时间的东西。并且不要让我开始咄咄逼人的脚手架" CodeCoffin,AppShackler或Ruby in Chains等框架。

答案 4 :(得分:3)

ZF是一个很好的起点。我使用zend_tool生成我的中型应用程序的MVC骨架,并使用了许多其他组件(Zend_Cache,电子邮件,翻译,表单,会话)。

我同意如果你试图像Zend所说的那样使用装饰器来完成表单布局。有一些方法可以只使用Zend_Form元素进行验证,并在自定义布局中使用 - 没有装饰器。

我对Zend Cookies的体验很糟糕 - 我无法为整个域设置cookie。老好的setcookie做对了。

关于Acl - 再次,Zend文档和Zend_Acl中的示例有时不能很好地工作。我使用了Controller插件方法和我自己的“基于角色的资源管理”来控制权限。

我甚至没有尝试使用Zend Data Gateway - 而是使用了Doctrine(我猜这是因为我喜欢nHibernate :))并且连接Doctrine非常简单。

我认为ZF很好,因为你可以随意使用它。我认为对其他一些框架来说会更难。

答案 5 :(得分:2)

构建中型应用程序的简单性。 在ZF之前,您必须构建自己的“框架”来执行中型应用程序。现在更简单了。

我认为脱钩和可以独立使用的简单元素是成功的关键。是一个很好的功能,但不是常规使用。

支持社区siz e与其他框架的平衡相关。

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

答案 6 :(得分:2)

好吧,我们是开发人员,因为我们应该能够编写“部分”我们自己的代码,不是吗?框架不应该是向导,只是一个额外的帮助。

答案 7 :(得分:1)

我没有选择Zend Framework,因为在我评估PHP框架时,它并不是一个完整且集成度足以构建Web应用程序的解决方案。我选择了symfony,从那以后我就没有必要切换到其他任何东西了。

我不确定它现在是否相同,但我一直认为ZF是一个组件库而不是框架。框架具有更严格的操作规则,并且通常具有更好的集成支持工具来帮助人们执行这些操作。在这方面,组件库更加松散。当框架规则符合框架领域中大多数应用程序的要求时,我自己显然更喜欢这个解决方案。 symfony对我来说就是这种情况。我根据需要使用某些ZF组件,但从不将我的项目建立在ZF本身上。

答案 8 :(得分:1)

我使用ZF有几个原因: 漂亮的类的主机,类的延迟加载,类的独立使用和干净清晰的源。我第一次使用它时需要构建一个ACL系统 - 一个非常复杂的系统。 Zend_Acl帮了大忙。

我认为ZF需要处理它的docs和db类。 db类问题与PHP本身有很大关系。所以也许这是Zend想要研究的东西。

OP是PHP的新手。我同意PHP有它的缺点,例如函数的任意命名,但通常它对HTTP有意义并且不会隐藏你的现实。

答案 9 :(得分:1)

表格布局:

这真的很容易。装饰者在你第一次接触它们时会很痛苦,它们只是黑魔法。然后你意识到它们是多么有用,你几乎可以用它们做任何事情。当你最终达到装饰器不够的程度时,你可以在视图中渲染单独的表单元素,甚至可以编写自己的表单HTML。考虑这个例子:

形式

$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
    }
}

你去吧。您有一个表单,您手动编写了HTML,但您仍然可以从ZF的内置验证中受益。为什么?因为您仍然在控制器中创建表单对象并将其通过POST发送给它。你仍然可以得到你想要的过滤器,验证器和任何东西。使用您想要的任何HTML。如果你想要极端,你也可以将外部视图插入到表单中。)。

哦,顺便问一下,你知道你的表格是可以重复使用的吗?是的,你可以写一个表格并在多个地方使用它。没有麻烦。这就是我个人喜欢ZF中的表单(并且不喜欢CodeIgniter - 顺便说一句,这也是一个很棒的框架)。

<强>认证

Zend Framework: Login password hash, email validator?

是的,它只是一小段代码。您基本上将其复制并粘贴到项目中。

对于ACL,您只需创建规则,然后在需要时检查它们。一个班轮。不能简单。

就个人而言,我认为ZF很受欢迎,因为它只是节省了你的钱。如果你把我放在一个项目的前面,我可以向你保证,如果你让我使用ZF代替我知道的另一个框架,我会快两倍。可能只有一小部分时间我需要在基线PHP中完成所有工作。这就是它:节省时间=省钱。或者赚取额外的钱 - 但是这两个规则中的任何一个,对吧?

答案 10 :(得分:1)

无需使用Zend_Form或Decorators本身。您可以只使用纯HTML表单,然后在Controller = Actions内部使用Zend_Filter_Input。所以你们两个世界都是最好的。

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();
        }
    }

答案 11 :(得分:0)

我不确定ZF是否真的是最受欢迎的PHP框架。我将它与其他框架进行比较后选择了它,这些框架“神奇地”做了更多的东西,因为它们似乎都难以定制。

我认为ZF是一个很好的面向对象的PHP MVC框架,但我不同意一些ZF方法。例如,我只使用Zend_Form进行过滤和验证数据。所有HTML和演示文稿都在视图脚本中完成。 CSS负责布局。如果我们需要一些更改,大多数时候只更改CSS就足够了。如果我需要在许多页面中显示相同的表单,我将其用作部分视图脚本。

我不想为每个Model编写Mapper并为每个数据库表创建一个Zend_Db_Table子类。相反,我正在研究如何使用其他模式进行数据访问,或者可能是Doctrine。

我不喜欢Zend_Acl是将ACL信息存储在ACL文件中。我想将这些信息存储在数据库中。

关于这个框架的好处是很容易让事情顺利进行。

答案 12 :(得分:0)

除了之前的答案之外,值得一提的是,在DZone最近的一个名为Which PHP framework would you use today for a brand new application?的池中,Zend Framework被选为新项目的最佳选择。