2010-06-09 99 views
0

我有一个非常古老的PHP应用程序(1999年),在过去的十年中一直在努力。在这一点上,应用程序开始显示它的年龄,所以我正在向symfony 1.4的“新”框架迁移。但由于该应用程序非常庞大,我无法立即执行此操作。所以我打算将旧应用程序包装到新的symfony应用程序中,并通过功能转换功能。Symfony 1.4和全局变量

这一过渡的第一步是让旧应用出现在新的symfony应用中。所以,我创建了“前端”应用程序,添加了一个“传统”模块,使其成为默认主页,并且我把我在index.php中的所有内容(所有页面都经过了这个index.php)放在indexAction的indexSuccess.php文件。我在“视图”中添加了代码,因为其中还有函数,并且更改该设置会花费比我想要花费在旧应用上更多的时间。

不幸的是我现在有一个全局变量的问题。我给大家举一个例子(我从来没有作出这样的这个寄存器功能,但它的,所以请看看过去的这一点。

$session = new ps_session; 
$demo = "this is a demo variable"; 
$session->register('demo'); 

在ps_session我有这个方法

public function register($var) { 
    global $$var; 
    $_SESSION [$var] = $$var; 
} 

所以应该将$ demo的内容放在名为“demo”的会话变量中。聪明的权利:)无论如何,var_dumping显示$$ var为“null”,如果在调用函数之前和之后调用var_dump,则$ demo会被填充。完全相同的代码没有symfony,它会返回正确的内容。

我在想什么?全球通话分布在这个庞大的应用程序的所有区域,所以我真的不想切换到其他的东西,所以我希望能够快速修复:)

也许相关,除索引外的所有代码.php内容位于前端/ lib/legacy /文件夹中,索引位于前端/ modules/legacy /(如果有一些范围问题,我缺少)

+0

你在任何时候都使用相同的PHP版本吗? – greg0ire 2010-06-09 14:25:44

+0

是的,5.3.2使用相同的php设置(register_globals on) – Roderik 2010-06-09 14:34:55

回答

0

我将整个旧站点放在web/legacy下,并将默认索引操作重定向到传统文件夹。大部分的网址都是由mod_rewrite制作的,所以很容易修复。其他网址经过了一个功能,所以修复是可以的,只有少数是硬编码的。为了使它完全透明,我只需要重做主页开始,所以我没有可见/遗产/在我的网址。谢谢您的帮助!

0

我认为,既然indexSuccess.php文件已包含在一个函数内(更确切地说,在这里:lib/vendor/symfony/lib/view/sfPHPView.class.php:185),这是行不通的,因为$ demo不在全局范围内。我没有看到任何简单的解决方法... 我认为你应该在/ web中创建一个旧文件夹,并使用路由重定向到它,如果该url对应于尚未迁移的东西。

+0

在索引操作中添加$ this-> redirect('/ legacy/index.php'))的问题是post变量(get vars i可以修复)不会传输到旧索引。我似乎没有找到有关路由的文档中的另一个解决方案,以了解我可以如何处理这个问题? – Roderik 2010-06-09 14:51:12

+0

也许你可以在apache级别做类似的事情,用rewriteRules或者类似的东西?在这种情况下,我认为POST信息不会丢失 – greg0ire 2010-06-09 15:14:31

0

我同意greg0ire,这是sfPHPView包含indexSuccess的方式的问题。

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