将Brownfield PHP Webapp转换为Zend Framework

时间:2012-05-04 15:18:51

标签: zend-framework brownfield

我们正在考虑将我们的PHP Webapp转换为不使用框架(这会杀死我们)来使用Zend Framework。由于应用程序的大小我不认为从头开始将是一个可行的管理选项,所以我想开始研究如何慢慢从当前的网站结构转换为使用Zend框架,但没有关于这个过程的很多信息。

到目前为止,我的计划是将当前的代码库转储到Zend应用程序的public /目录中,解决了我确定会出现的大量问题,然后开始一次重写一个模块。

过去有没有人有过这方面的经验,它是如何为你效劳的?

1 个答案:

答案 0 :(得分:6)

我现在已经做了一些。对我来说最有效的是将ZF'放在'旧应用程序周围,所以所有请求都通过ZF。然后我有一个'Legacy'控制器插件,它检查ZF是否满足请求,如果没有,则将其发送到旧应用程序:

class Yourapp_Plugin_Legacy extends Zend_Controller_Plugin_Abstract
{
    public function preDispatch(Zend_Controller_Request_Abstract $request)
    {
        $dispatcher = Zend_Controller_Front::getInstance()->getDispatcher();
        if (!$dispatcher->isDispatchable($request)) {
            // send to the old code...
        }
    }
}

然后你如何将请求发送到旧应用程序取决于它是如何实现的。在一个项目中,我检查了请求,确定了请求进入的旧代码中的哪个文件,然后要求进入。听起来这可能适合您。在另一个项目中,我的解决方案是将所有这些请求路由到ZF项目中的LegacyController,该项目运行旧代码以获取生成的HTML,然后从新项目中将其呈现在Zend_Layout内。

这种方法的优点是,您可以在重写部分旧应用程序时逐步引入ZF模块,直到达到ZF可以提供100%请求的程度。此外,由于ZF项目在运行旧代码之前已初始化,因此您的旧代码可以使用ZF自动加载器,因此您可以开始使用更多ZF样式编写的模型替换旧代码中的类,并让两者使用它们应用程序的一部分。