【问题标题】:Php framework to slowly refactor an inherited sitephp框架慢慢重构一个继承的站点
【发布时间】:2010-08-25 15:08:38
【问题描述】:

我最近继承了一个中型 php 站点,该站点的代码非常糟糕。它违反了从 MVC 到 DRY 的所有最佳实践方法,容易受到 SQL 注入以及介于两者之间的一切攻击。

我已经访问了其他问题,并且已经将所有内容都放在了 VCS 上,并且正在考虑框架替代方案。不过,我想听听您对一个框架的意见,该框架可以让我慢慢地从实际站点迁移到框架控制的站点。

谢谢。

【问题讨论】:

  • 迁移到任何框架都将是一项艰巨的任务。我真的不认为这是微不足道的。但我祝你一切顺利,希望你能达到你想要的结果!
  • 你不太可能得到一个真正客观的答案,但我认为所有提到的框架(你在你的标签列表中)可能会做你想做的事。最好阅读各自网站上的销售宣传,闭上眼睛,把尾巴钉在驴身上。
  • +1 我感受到你的痛苦!不久前,我继承了一个相当大而可怕的网站。它基本上是网站中所有不好的东西的大师班;科学怪人的怪物,代码混乱不堪,充满了晦涩难懂的错误。我们考虑过在 symfony 中重新开发它,但是客户不想在开发上花任何钱……相反,他们花了一大笔钱来支持我们,我们只是不断地堵住漏洞并用新的垃圾螺栓固定,等待那一天它终于结束了。美好时光:)

标签: php zend-framework cakephp symfony1 kohana


【解决方案1】:

在我看来,Zend 框架实际上是最好的选择,因为它具有很好的随意使用结构,并且不像大多数其他框架那样是全栈框架。

这意味着您可以先迁移模型层,而无需接触视图或控制器部分。即使是控制器部分,您也可以先将所有内容放入控制器中,而不必依赖路由器,因此您仍然可以使用旧 URL。

【讨论】:

  • 最终选择了 Zend,直到现在都非常满意。文档很棒,我什至在 Zend_Search_Lucene 上重新实现了搜索
【解决方案2】:

我将投票给 CakePHP (http://www.cakephp.org)。它有能力很好地管理一切。

模板

这将允许您为网站创建基本模板/布局。它是网站的主体。您可以将多个布局都存储在views/layouts 目录中。您可以确定要用于网站内任何给定页面的布局。

静态内容

如果您有静态内容页面,它们都位于views/pages。这些将加载到您放置<?php echo $content_for_layout; ?> 的任何位置。

自定义代码

很多时候,您将拥有可能不适合框架的自定义代码。不用担心,您可以将其添加到 libsvendors 文件夹并从那里调用该功能。

通过烘焙快速升级

蛋糕的一个很酷的功能是烘烤功能。将模式添加到数据库后,您可以使用 bake 让 CakePHP 编写所有模型(带有关系)、控制器(带有基本的 CRUD 和管理部分)以及控制器中每个操作的视图。

Cake 非常适合我从事的所有项目。它使代码井井有条,拥有一个非常活跃的社区,并且他们的文档写得很好,易于理解。

更新:有关使用 cakephp 的一些网站的更多信息,您可以在此处查看示例列表:http://book.cakephp.org/view/510/Sites-in-the-wild

一些值得注意的(高流量网站)是:

https://addons.mozilla.org

http://scratch.mit.edu/

【讨论】:

  • 如果你喜欢一个遍布全局命名空间的框架,它的 API 经常变化,并且占用了大量不必要的资源,请使用 CakePHP。
  • 不确定您所说的“全局命名空间中的废话”是什么意思。但是,是的,随着所有新功能的添加和更新,API 也会发生变化。但他们保持良好的记录。但如果您不想升级您的蛋糕版本,则无需升级。是的,如果您运行的是旧硬件,那么运行任何东西都可能会出现问题。我知道他们在雅虎有项目在奔腾 d 盒子上运行蛋糕,在谷歌和 YSM 上管理超过 3000 万个关键字,而且运行得很好。所以我不确定你说的是什么经验,但对我来说不是这样。
【解决方案3】:

Kohana 是我选择的框架,但我不会开始谈论它的优点,我相信它可以做任何其他人可以做的事情。

面对与您描述的相同的遗留代码库问题,我的回应是采用 Kohana 并禁用请求路由,以便您可以逐页将其用作包含,直到您准备好。

变化很小;如果你有兴趣fork of kohana is up on github

您可能需要根据代码库的复杂程度调整 php 错误级别设置;)

【讨论】:

    【解决方案4】:

    Zend 框架很棒。

    更好的是,来自 Chris Abernethy 的 excellent post 展示了如何使用 ZF 将现有站点从扭曲的意大利面盘逐渐迁移到一个漂亮的 MVC 结构中。

    【讨论】:

      【解决方案5】:

      看看Fat-Free Framework。它允许程序代码和 OOP 代码,因此您可以采用两阶段方法。如果基本代码当前是程序性的,那么您可以首先将所有精力集中在向 MVC 架构的转换上。这样你就可以得到一个概念证明,所有未来的努力都可以像第一阶段一样富有成效。然后你可以移动太严格 - OOP。没有其他框架会给你这种灵活性。而且您的最终用户不会感到任何延迟,或者更糟的是,文化冲击。

      【讨论】:

      • CakePHP 允许这样做。只需按原样将所有内容放入 webroot 中,它就可以正常运行,而无需通过框架进行处理。当您将片段迁移到框架时,您只需更新它们指向的 tje 链接。因此,例如,在迁移后不运行add_user.php,而是将链接更新为/user/add/,框架就会启动。使用Fat-Free 之类的东西的缺点是结构执行松散。它并没有消除不良的编码实践,而是在有人无法处理 OOP 结构时鼓励他们。
      • 不执行并不一定意味着鼓励。一个愚蠢的编码员总是可以训练成一个聪明的编码员。懒惰的程序员永远是懒惰的程序员。
      【解决方案6】:

      在这个地方,您将获得与框架用户一样多的答案。很明显,使用他选择的框架的人会向其他人提供建议。

      我选择 symfony。

      但是,如果您关心最佳实践,那么 symfony 和 Zend 都是不错的(也是唯一的)选择。

      【讨论】:

        【解决方案7】:

        这听起来像是一项艰巨的任务。

        我只能推荐 CakePHP,因为那是我使用的,但这并不意味着另一个框架会更少或更合适。归根结底,它们几乎都是一样的。

        根据您希望的任何标准进行选择,例如公共支持/用户群(Cake 非常庞大)、感觉、名称、网页上的颜色等等。但我的建议是坚持选择并顺着学习曲线前进。

        【讨论】:

          【解决方案8】:

          所有提到的框架都很好,但是你需要重写很多东西,比如查询。你可能不想使用像 Doctrine 或 Eloquent 这样的 ORM。只需坚持使用 Active Records 之类的东西。 Codeigniter、CakePHP 和 Yii 都可以。

          但这不会是一件容易的事。被警告!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2016-02-24
            • 2017-05-08
            • 2012-03-13
            • 2023-03-23
            相关资源
            最近更新 更多