【问题标题】:Symfony2 - Error on prod - Cannot use object of type Symfony\Component\HttpFoundation\Request as arraySymfony2 - 产品错误 - 无法使用 Symfony\Component\HttpFoundation\Request 类型的对象作为数组
【发布时间】:2015-12-17 06:58:54
【问题描述】:

我刚刚在网上上传了我的 Symfony (2.7) 项目,我在 prod 环境 (app.php) 中仅在线发生了 500 错误。我在 app.php 文件中设置了$kernel = new AppKernel('prod', true); 以查看错误消息:

错误:无法使用 Symfony\Component\HttpFoundation\Request 类型的对象作为数组
在第 143 行的 vendor/symfony/symfony/src/Symfony/Component/HttpKernel/EventListener/RouterListener.php 中

}
if (null !== $this->logger) {
    // Below is line 143
    $this->logger->info(sprintf('Matched route "%s".', isset($parameters['_route']) ? $parameters['_route'] : 'n/a'), array(
        'route_parameters' => $parameters,
        'request_uri' => $request->getUri(),
    ));

(此文件是 Symfony 的一部分,请参阅完整代码 here。)

在本地 (WAMP) 中,我使用 app.php 或 app_dev.php 没有问题。 在线,app_dev.php 运行良好,但尝试访问http://mydomain.fr/web/ 时出现此错误。

我有点迷路了,如果您需要更多信息,请询问我应该在这个问题中复制哪个文件。
只是为了看看会发生什么,我在 RouterListener.php 中评论了记录器行,我显示了另一个不同的错误。我想我的服务器配置有问题或类似的东西......但我不知道我应该看什么。

【问题讨论】:

  • 我很确定您的 $parameters 变量实际上是 Request 对象。
  • 您必须向我们展示完整的方法代码,而不仅仅是有问题的行。
  • github.com/symfony/HttpKernel/blob/2.7/EventListener/… 但我不想(也不认为我必须)更改这个文件,它是 Symfony 的一部分。虽然它可能有助于了解问题所在。

标签: php symfony


【解决方案1】:

一些控制器代码试图通过对象上的键访问值,就好像它是一个数组一样;

<?php

$moo = (object) ['foo' => 'bar' ];
/* run-time error below: */
$moo['foo'];

当您升级“库”或 API 而不更新客户端代码时会发生这种情况。当客户端代码(您的代码)混淆函数调用中参数的顺序时,也会发生这种情况。

【讨论】:

  • 我不明白你所说的升级“图书馆”是什么意思。 (我没有升级任何关于 Symfony 的东西。)在线服务器的 PHP 版本(5.4)比本地(5.5)旧。它有什么影响吗?为什么它适用于 app_dev.php 而不是 app.php 呢?
  • 嗨,对不起,我花了很长时间(今天早些时候没有时间进行测试)。我在 prod 服务器上升级了我的 PHP 版本,它解决了我的问题。我不确定这正是你在回答中的意思,但它是相关的,所以我接受它。
  • "The library" 在这种情况下是 symfony 包(整个供应商文件夹)。我不是说 PHP。
  • 嗯,这不是我的问题(我通过 FTP 将供应商文件从本地计算机复制到我的在线服务器),但它可能是。无论如何,您让我想到检查我的 PHP 版本,所以您提供了帮助,谢谢! :)
猜你喜欢
  • 1970-01-01
  • 2016-07-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多