首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >生产环境中Symfony2数组到字符串的转换错误处理

生产环境中Symfony2数组到字符串的转换错误处理
EN

Stack Overflow用户
提问于 2017-02-22 19:03:51
回答 2查看 370关注 0票数 0

我是外行。

使用Symfony 2.6.13。

生产环境: AWS Linux,Elastic Beanstalk。开发环境: WAMP。

我有一个错误,它让我感到困惑,因为它只会让我在开发过程中出现问题。以下是生产环境中错误日志的摘录:

代码语言:javascript
运行
复制
[Wed Feb 22 10:40:16.484644 2017] [:error] [pid 12453] [client 172.31.46.85:18619] PHP Notice:  Array to string conversion in /var/app/current/app/cache/prod/twig/db/dbafcb45562bb5839ccefc3c501bc398a96f8c34fd19c0f11d60122efe04cb15.php on line 220, referer: https://xxx-xxx.xxx.com/contact/986513/risk/1

我在生产和开发环境中都得到了这个错误。在生产环境中,错误似乎会被忽略,页面会加载。在开发过程中,错误不会被忽略,页面错误会显示以下内容:

代码语言:javascript
运行
复制
CRITICAL: Uncaught PHP Exception Twig_Error_Runtime: "An exception has been thrown during the rendering of a template ("Notice: Array to string conversion")

为什么这个错误在生产中会被忽略,而在开发中却不会?

EN

回答 2

Stack Overflow用户

发布于 2017-02-23 00:09:33

我的问题的答案是,我没有意识到开发环境和生产环境之间的区别。我期望我在开发中收到的错误也会在生产中导致相同类型的错误,并停止页面加载。

我需要更详细地了解两种环境之间的差异。

票数 0
EN

Stack Overflow用户

发布于 2019-03-21 22:42:30

尝试在渲染之前立即将error_reporting设置为'0',然后将其设置回其原始值。

这可以防止抛出“数组到字符串的转换”错误,否则会完全停止模板的呈现。

相反,您将看到它在呈现的文本中作为Array输出。

我们可以使用ini_set()很容易地实现这一点。

下面是一个例子。

我的twig helper类的render方法看起来像这样,并且工作得很好:

代码语言:javascript
运行
复制
    public function render(string $name, array $params): string
    {
        $this->setIniSettings();

        try {
            $result = $this->twig->render($name, $params);
        } catch (\Throwable $e) {
            $this->restoreIniSettings();
            throw $e;
        }

        $this->restoreIniSettings();
        return $result;
    }

我有一个配置文件,它定义了渲染细枝模板设置的ini设置,如下所示:

代码语言:javascript
运行
复制
return [
    'ini_settings' => [
        'error_reporting' => '0'
    ],
];

setIniSettings()中,我只是循环遍历我在配置文件中定义的一组设置,如下所示:

代码语言:javascript
运行
复制
    protected function setIniSettings()
    {
        $this->oldIniSettings = [];

        foreach (config('twig.ini_settings', []) as $setting => $value) {
            $this->oldIniSettings[$setting] = ini_set($setting, $value);
        }
    }

然后restoreIniSettings()看起来像这样:

代码语言:javascript
运行
复制
    protected function restoreIniSettings()
    {
        foreach ($this->oldIniSettings as $setting => $value) {
            ini_set($setting, $value);
        }
    }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42389438

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档