如何使用遗留代码的yii?

时间:2012-05-10 15:24:04

标签: php yii legacy

我的同事和我的团队决定在Yii中重写遗留应用程序,但管理层有一个严格的政策,所有功能必须保持不变,所以我们必须使用旧模块,直到它们被移植到Yii,这些模块是以程序方式编写的,并且每个模块都有一个包含在一般index.php中的php文件。一般index.php做了三件事:

  • 启动会话并向其添加变量。
  • 创建数据库连接。
  • 呈现所请求模块的主要php文件。

一旦我们开始使用Yii,我们如何使用旧模块?

我们已经查看了URL Management并且逻辑非常简单:如果url与旧模块匹配,请使用renderFile()渲染它,否则让Yii工作,但我们不知道是否这是最好的方法。

在开始这个过程之前我们应该考虑其他什么吗?

我想知道URLManagement + renderFile()是否可行?

2 个答案:

答案 0 :(得分:1)

确实可以使用URL处理,但是我只是编写一个自定义URL规则类而不是使用大量的路由,因为你的配置会很乱。

如果您想要一些其他建议:

首先,拆分创建应用程序及其执行

require_once($yii);
Yii::createWebApplication($config);

// If you want to run the app:
Yii::app()->run();

通过这种方式,您可以完全控制应用程序是否实际运行。

至于DB。如果你使用的是PDO,那么你很幸运。我会以常规方式给Yii一个db组件,然后修改general.php以使用来自Yii的PDO实例(Yii :: app() - > db-> pdoInstance)。它将始终加载,以便应该工作。如果您不使用PDO,只需使用2个连接,除非您有很多访问者,否则它并不是那么糟糕。

关于会话,不应该有那么多的初始化,所以除非你有自定义处理程序,否则也将其移动到Yii。无论如何,这些功能都是一样的,所以应该没有太多问题。

然后我认为有两种做事方式:

1)general.php先行。

您必须在旧文件中创建模块列表,并确定当前请求的模块是否已迁移。基本上将仍然在general.php中的模块名称放在一个数组中,看看url是否需要其中一个并包含general.php(并且不要执行Yii :: app() - > run())。其余的通过Yii。

2)Yii先走了。

让yii做它的魔力,但拦截404 http异常。使用自定义错误处理函数(http://www.yiiframework.com/doc/guide/1.1/en/topics.error)可以轻松完成此操作。如果再次进入错误函数:确定它是否是有效的遗留模块并包含general.php。

两种方式都非常混乱但至少像这样你有机会迁移一个模块,同时将其余模块保留在旧文件中。

答案 1 :(得分:0)

取决于Size ,complexity and Person Months软件对于做出任何决定至关重要。当然,建议使用homogeneous性质而不是heterogeneous性质是非常明智的。如果您上面提到的模块是您要转换的模块,我建议您必须在Yii中使用RE-DO,因为Yii具有强大的ORM模块非常容易制作。

我建议您选择RE-Do

以下可能对您有意义 How do you convert an old OOP PHP project into the Yii Framework?