【问题标题】:Can't use flash method in prod environment不能在 prod 环境中使用 flash 方法
【发布时间】:2010-03-16 09:38:27
【问题描述】:

我在 WAMP 2.0 中使用 symfony 1.4 的 setFlash 和 hasFlash 方法

在本地使用我的 frontend_dev 应用程序,一切正常。 但是在生产环境中,我的测试$this->forward404Unless($user->hasFlash('resultsArray')); 失败了。

我认为 Flash 方法默认启用。请问我该怎么做才能让它工作?

编辑:我发现了一条有趣的错误消息。

这是我的 filters.yml 文件

# You can find more information about this file on the symfony website:
# http://www.symfony-project.org/reference/1_4/en/12-Filters

rendering: ~
security:  ~

# insert your own filters here

cache:     ~
flash:     ~
execution: ~

在 frontend_prod.log 中,我有:

3 月 16 日 05:57:42 symfony [info] {sfPatternRouting} 匹配路由 "homepage" (/) for / 参数数组 ('module' => 'main', 'action' => 'index',)
3 月 16 日 05:57:42 symfony [err] {sfParseException} 配置文件“D:\wamp\bin\php\symfony\symfony14\lib/config/config/filters.yml”指定类别“flash”缺少类键。

【问题讨论】:

  • @Gaff:能把代码贴在对应的action方法里面吗?

标签: jquery-plugins symfony1 symfony-1.4


【解决方案1】:

您是否在重定向/转发上下文中调用 executeShowResult 操作? flash 的生命周期有限,在下一次请求后它将消失。显然 resultsArray 已被清除。

【讨论】:

  • 或者不是,因为它在开发环境中完美运行(当然使用相同的代码)。我知道这很奇怪,我不知道如何解决这个问题。
  • 同意。我想这并不能解释为什么它在 OP 的开发环境中不起作用但在生产环境中不起作用?
  • 我的意思是,也许它已经被清除了,但为什么它在一个环境中工作而不在另一个环境中工作?
  • @Gaff:你设置了 flash 然后重定向/转发到 executeShowResult 动作吗?你能发布你的代码吗?
  • 抱歉,我错过了您的那部分消息:“您是否在重定向/转发上下文中调用 executeShowResult 操作?”以下是页面的显示方式: 1- 在 flash resultsArray 中设置的 submitAction 2- submitSuccess.php 页面。它只包含这个 " $pager, 'myModule' => $myModule, 'myTemplate' => $myTemplate, 'results' => $results) ) ?>" 3- 此外显示结果,_showresult.php 页面包含分页器的另一个部分:“_pagination”,其中包含指向 showResult 操作的链接。
【解决方案2】:

您在生产中生成了 404(网站图标或图像),这被视为对 404 操作的请求(在重定向之后)清除您的 flash 变量。

【讨论】:

    【解决方案3】:

    不确定这是否是答案,但我的 filters.yml 文件中没有 flash 键,在 Symfony 1.4.3 应用程序中,自从从Symfony 网站。您是否尝试过从 yml 文件中删除该行,清除缓存并重试?

    【讨论】:

    • 你是对的。我在遇到问题后提出了它(它给了我“指定类别“flash”缺少类键。”消息)。这只是一个愚蠢的测试。对不起。我已经删除了它,但和以前一样,它仍然不起作用。
    【解决方案4】:

    我想知道您是否为 prod 启用了缓存?

    如果你这样做了,并且正在缓存 with_layout(或者如果 flash 在动作模板中,则缓存相关动作),那么它将在后续视图中返回没有 flash 消息的缓存页面。

    【讨论】:

      【解决方案5】:

      确保您的factories.yml 上有use_flash=true

      user:
        class: myUser
        param:
          timeout:         3600
          logging:         %SF_LOGGING_ENABLED%
          use_flash:       true
          default_culture: %SF_DEFAULT_CULTURE%    
      

      一个相当老的回答,但我希望对其他有同样问题的人有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2015-06-13
        • 1970-01-01
        • 2015-10-09
        • 2019-07-31
        • 2014-04-17
        • 2013-11-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多