Symfony1 Symfony 1.4和全局变量

Symfony1 Symfony 1.4和全局变量,symfony1,global-variables,legacy,Symfony1,Global Variables,Legacy,我有一个非常古老的php应用程序(1999),它在过去十年中一直在开发。在这一点上,应用程序开始显示它的年龄,所以我正在迁移到一个“新”的框架,symfony 1.4。但是由于这个应用程序非常大,我不能马上这么做。因此,我计划将旧应用程序包装到新的symfony应用程序中,并按功能转换功能 此转换的第一步是使旧应用程序出现在新的symfony应用程序中。因此,我创建了“frontend”应用程序,添加了一个“legacy”模块,将其作为默认主页,并将index.php中的所有内容(所有页面都通过

我有一个非常古老的php应用程序(1999),它在过去十年中一直在开发。在这一点上,应用程序开始显示它的年龄,所以我正在迁移到一个“新”的框架,symfony 1.4。但是由于这个应用程序非常大,我不能马上这么做。因此,我计划将旧应用程序包装到新的symfony应用程序中,并按功能转换功能

此转换的第一步是使旧应用程序出现在新的symfony应用程序中。因此,我创建了“frontend”应用程序,添加了一个“legacy”模块,将其作为默认主页,并将index.php中的所有内容(所有页面都通过这个index.php)放入indexAction的indexSuccess.php文件中。我在“视图”中添加了代码,因为其中也有函数,更改设置将花费我比在旧应用上花费更多的时间

不幸的是,我现在遇到了全局变量的问题。让我给你举个例子(我从来没有这样做过这个寄存器函数,但它是,所以请看过去)

$session = new ps_session;
$demo = "this is a demo variable";
$session->register('demo');
在ps_课程中,我有这个方法

public function register($var) {
    global $$var;
    $_SESSION [$var] = $$var;
}
所以它应该把$demo的内容放在一个名为“demo”的会话var中。聪明的权利:)无论如何,var_dump向我显示,$$var为“null”,如果我在调用函数之前和之后进行var_dump,则$demo被填充。没有symfony的完全相同的代码,它返回正确的内容

我错过了什么?这个庞大的应用程序的所有区域都有全球呼叫,所以我真的不想切换到其他应用程序,所以我希望有一个快速修复:)


可能是相关的,除了index.php内容之外的所有代码都在frontend/lib/legacy/folder中,索引在frontend/modules/legacy/(如果我缺少一些范围问题)

我认为,因为您的indexSuccess.php文件包含在函数中(更准确地说,这里是:lib/vendor/symfony/lib/view/sfPHPView.class.php:185),这无法工作,因为$demo不再在全局范围内。我看不出有什么简单的解决办法。。。
我认为您应该在/web中创建一个旧文件夹,如果url对应于尚未迁移的内容,则使用路由重定向到该文件夹。

我将整个旧站点置于web/legacy下,并从默认索引操作重定向到旧文件夹。大多数url都是由mod_rewrite制作的,因此很容易修复。另一个url通过了一个函数,所以修复是可以的,只有少数是硬编码的。为了让它完全透明,我只需要重做主页就可以开始了,这样我的url中就没有可见的/遗留的/了。谢谢你的帮助

我同意GregFire的观点,这是sfPHPView包含indexSuccess的方式的问题


你能在默认的/index操作中简单地
require
index.php吗?

你在任何时候都使用相同的php版本吗?是的,5.3.2使用相同的php设置(register_globals on)在index操作中(添加$this->redirect('/legacy/index.php'))的问题是post变量(get vars我可以修复)不会传输到旧索引。我似乎没有在文档中找到另一个关于路由的解决方案,来看看我如何处理这个问题?也许你可以在apache级别做类似的事情,用重写规则或类似的东西?在这种情况下,我认为帖子信息不会丢失