如何用Kohana包装PHP遗留代码?

如何用Kohana包装PHP遗留代码?,php,model-view-controller,kohana-3,Php,Model View Controller,Kohana 3,我有大量用PHP编写的遗留代码,这些代码并不是在任何特定的框架上编写的,而是大多数老式(即内联)PHP。但是,我的大部分新代码都是在Kohana 3.1.X框架上编写的。尽管Kohana确实允许遗留代码和Kohana文件在同一个网站上共存,但我现在想将每个遗留代码文件包装为一个视图,并充分利用Kohana的MVC设计模式和URL重写。然而,我遇到了一些问题,我的遗留代码无法访问从视图本身(即遗留代码)中定义的全局变量,也无法使用内联函数,这些内联函数正试图通过global scope语句查看这些

我有大量用PHP编写的遗留代码,这些代码并不是在任何特定的框架上编写的,而是大多数老式(即内联)PHP。但是,我的大部分新代码都是在Kohana 3.1.X框架上编写的。尽管Kohana确实允许遗留代码和Kohana文件在同一个网站上共存,但我现在想将每个遗留代码文件包装为一个视图,并充分利用Kohana的MVC设计模式和URL重写。然而,我遇到了一些问题,我的遗留代码无法访问从视图本身(即遗留代码)中定义的全局变量,也无法使用内联函数,这些内联函数正试图通过global scope语句查看这些全局变量。例如:

application/views/legacy.php

$gvar = 5;

function getadminsettings(){
    global $gvar;
    echo $gvar;
}
应用程序/classes/controller/myctrl.php

...
public function action_legacy() {
    // call legacy.php as a view via View::factory()
}
...
因为我有这么多遗留代码,所以将所有这些遗留代码文件重构为真实视图是不切实际的。我如何将这些文件视为视图,或者像视图一样访问它们,以便从现在起我可以在控制器中编写逻辑,而不是内联(从而遵循真正的MVC设计模式),然后将变量绑定到这些遗留文件

我确实看过了,但这篇文章在这个案例中并没有真正起作用,因为我处理的是Kohana框架

更新:


Kohana似乎正在使用输出缓冲区,这就是为什么它无法访问遗留文件中的此类全局变量。是否有人成功地在Kohana 3.2中获得了访问全局变量的视图?

将遗留应用程序移动到MVC风格的框架中不适合采用剪切粘贴方法。在除了最简单的应用程序之外的任何应用程序中,重构代码以使其与MVC兼容都需要大量的时间和精力

如果您的遗留应用程序正常工作,并且没有进行常规开发,那么切换到MVC将不会带来什么好处。MVC模式通常会引入开销,主要是对开发人员而不是最终用户有利


但是,如果您的应用程序需要定期维护,则必须花费所需的精力重构旧代码以适应新方法。

我从未尝试过这种方法,但您可以尝试将代码放入控制器,而不是视图

假设您正在为控制器使用一个控制器模板

public function action_legacy() {
    $this->auto_render = FALSE;

    include('legacy file'); 
    // you could cut and paste the legacy code here, but it might get to messy
}

是的,我希望遗留代码将继续定期维护,但我想限制对遗留代码库的更改数量。@Matthew:在这种情况下,我认为需要进行全面的重构。包装现有代码的尝试充其量是脆弱的,最糟糕的是维护起来非常困难。我一直在探索通过创建一个特殊的类来访问这些脚本,而不是使用View::factory()方法,但我不想在服务器上增加更多的负载。您认为这可能有效吗?如果您的遗留脚本以对您有用的格式输出数据,那么它将有效。脆弱性和较差的可维护性仍然存在,但利弊由你来权衡。