【问题标题】:ZendFramework integration with other frameworksZendFramework 与其他框架的集成
【发布时间】:2011-06-01 11:39:34
【问题描述】:

我想让这个问题成为那些对ZendFramework 与其他库/框架集成感兴趣的人的指南。在 StackOverflow 上搜索并不能提供关于该主题的广泛视图。

问题是:您在当前基于 ZF 的项目中使用了哪些库/框架?基于 ZF 的项目架构的最佳实践是什么?

我并不是指任何已经属于 ZF 的组件。请描述您已集成的其他框架(如RuckUsingSmartyDoctrine)。它也适用于任何 GUI 框架(也许您使用 CSS 框架),以及 JS 框架(不仅仅是jQueryprototype,而是一些高级结构)。

主要要求:必须是 ZendFramework 项目。

描述性能优化的答案将获得额外奖励。

更新

每个像 @BryanM 的信息丰富的答案都将被考虑获得额外的赏金奖励。

【问题讨论】:

  • +1 链接到 RuckUsing-从未听说过
  • 嗯,基本上它归结为(如果它是一个 PHP 应用程序),如果它可以实现引导过程并且自动加载器可以相互协同工作,那么有很多关于 zend 框架和学说集成的教程,不幸的是,我还没有找到适用于当前 Doctrine Beta 的任何人。 JS 和 CSS 的问题可以完全封装在这方面的 PHP 应用程序的使用中(恕我直言)——无论如何 +1 以提出一个有趣的观点!
  • @Hannes 正如我在问题中所说,实际上并不是如何集成不同的框架,而是为应用程序选择什么框架。引导和编写自定义插件很好,只要它是可重用的,我充分利用了这一优势。但是像意大利面条一样的架构很糟糕,所以我希望看到具有成熟功能(CI、DB 迁移等)的真实应用程序的良好示例。

标签: php javascript css zend-framework frameworks


【解决方案1】:

我在 Zend Framework 项目中使用 Doctrine 2。它易于使用并且可以无缝集成。集成它的基本步骤是:

  • 编写一个资源插件,该插件将使用application.ini 中的配置选项初始化一个 Doctrine 2 EntityManager。可以在 Benjamin Eberlei 的 DoctrineExtensions 中找到一个示例。
  • 我不依赖全局注册表 (Zend_Registry) 来存储 EntityManager 引用,而是依赖一个简单的依赖注入解决方案,如 described here 来向我的控制器提供实例。
  • 我依靠 Doctrine 的事件系统来创建可重用的“行为”类来执行更新时间戳或验证数据等操作。
  • 我将所有实体和业务对象保存在我的应用程序的“模型”文件夹中(在它自己的命名空间下),其他所有内容都保存在我的library 文件夹中。我大量使用 PHP 5.3 命名空间来保持井井有条。
  • 我使用 Doctrine 的新迁移库通过命令行处理对数据库的更新。
  • 我还强烈建议在Phing 中创建详细的构建过程,以便处理库依赖关系、自动化单元测试和运行迁移,这些迁移可以集成到源代码控制或 CI 服务器中。如果您使用其中一种框架,也适用于编译 Javascript 或 CSS。

这些做法不仅对 Doctrine 有益,而且在您尝试构建网站架构的任何时候都可以派上用场。我认为 Zend 在可扩展性方面最大的资产是资源插件和 ActionHelpers / Controller 插件。

【讨论】:

  • +1 你使用 cron 作业吗? js/css 框架?任何性能优化?
  • Cron 作业适用于需要 cron 的事情。不特定于 ZF 应用程序。 Doctrine 2 依赖于将预编译的元数据存储在缓存中,并自动生成代理类文件以进行延迟加载。本质上,不要在运行时做任何可以在运行前完成的事情。
  • 赏金是给你的,因为你已经给出了最丰富的答案。
【解决方案2】:

还要记住 HtmlPurifier 用于 HTML 清理,通常基于允许标签的白名单解析用户提供的标记,并生成符合标准的输出标记。

它可以作为抵御XSS攻击的第一道防线。请注意,Zend_Filter_StripTagsnot sufficient 用于此目的。

【讨论】:

    【解决方案3】:
    • ZendX_JQuery(zendcast.com 上提供了教程)。

    • 虽然它是一个 ruby​​ 应用程序,但我们使用webistrano 来部署 php 项目。

    • 如果您的 Web 应用程序必须进行大规模的全文搜索,我会结合使用 sphinx 和 zend (sorgalla.com)。

    • 如果您想使用像 MongoDB 这样的新 NoSQL 数据库,您可以使用 morph 作为高级 php 库。我只是将文件复制到“库”并告诉自动加载器加载文件:autoloaderNamespaces[] = "Morph_"。

    • ZF_Debug 是一个很好的开发调试工具栏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-07
      • 1970-01-01
      • 2015-03-21
      • 1970-01-01
      • 2010-12-11
      • 1970-01-01
      • 2010-10-16
      • 2023-04-11
      相关资源
      最近更新 更多