2

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

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

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

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

在开始这个过程之前,我们是否应该考虑其他任何事情?

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

4

2 回答 2

1

确实可以使用 URL 处理,但是我会简单地编写一个自定义 URL Rule 类而不是使用大量路由,因为您的配置会一团糟。

如果您想要一些替代建议:

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

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

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

这样您就可以完全控制应用程序是否实际运行。

至于数据库。如果您使用的是 PDO,那么您很幸运。我只会以常规方式给 Yii 一个 db 组件,然后修改 general.php 以使用来自 Yii 的 PDO 实例(Yii::app()->db->pdoInstance)。它总是会在之后加载,这样应该可以工作。如果您不使用 PDO,只需使用 2 个连接,除非您有很多访问者,否则这还不错。

关于 session 不应该有太多的初始化,所以除非你有一个自定义的处理程序,否则也将它移动到 Yii。反正功能都是一样的,所以应该没有太大问题。

在我看来,有两种做事方式:

1)general.php 排在第一位。

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

2) Yii 先行。

Have yii do it's magic but intercept the 404 http exceptions. This is easily done with a custom error handler function (http://www.yiiframework.com/doc/guide/1.1/en/topics.error). If you get to the error function again: determine if its a valid legacy module and include general.php.

Both ways are pretty messy but at least like this you get the chance to migrate one module whilst keeping the rest in the legacy file.

于 2012-05-13T06:47:32.353 回答
0

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

我建议你应该去一个RE-Do

您可能感兴趣以下内容 如何将旧的 OOP PHP 项目转换为 Yii 框架?

于 2012-05-10T18:22:58.163 回答