确实可以使用 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.