【问题标题】:Symfony 1.4 and global variablesSymfony 1.4 和全局变量
【发布时间】:2010-06-09 14:13:56
【问题描述】:

我有一个非常古老的 php 应用程序(1999 年),在过去十年中一直在开发。此时应用程序开始显示它的年龄,所以我正在迁移到一个“新”框架,symfony 1.4。但由于该应用程序非常大,我无法立即执行此操作。所以我打算将旧应用程序包装到新的 symfony 应用程序中,并按功能转换功能。

这个过渡的第一步是让旧应用出现在新的 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 的完全相同的代码,它返回正确的内容。

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

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

【问题讨论】:

  • 你是否一直使用相同的php版本?
  • 是的,5.3.2 具有相同的 php 设置(register_globals on)

标签: symfony1 global-variables legacy


【解决方案1】:

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

【讨论】:

  • 在索引操作中这个(添加 $this->redirect('/legacy/index.php'))的问题是 post 变量(获取我可以修复的变量)没有传输到旧索引。我似乎没有在有关路由的文档中找到另一种解决方案,看看我该如何处理?
  • 也许你可以在 apache 级别做类似的事情,使用 rewriteRules 或类似的东西?在这种情况下,我认为 POST 信息不会丢失
【解决方案2】:

我将整个旧网站放在 web/legacy 下,并从默认索引操作重定向到 legacy 文件夹。大多数网址都是由 mod_rewrite 制作的,因此很容易修复。另一个 url 经历了一个函数,所以修复没问题,只有少数是硬编码的。为了使其完全透明,我只需要重做主页即可,因此我的网址中没有可见的/legacy/。谢谢您的帮助!

【讨论】:

    【解决方案3】:

    我同意 greg0ire 的观点,即 sfPHPView 包含 indexSuccess 的方式存在问题。

    你能在默认/索引操作中简单地requireindex.php 吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2022-01-28
      • 1970-01-01
      相关资源
      最近更新 更多