在prod环境中不能使用flash方法

时间:2010-03-16 09:38:27

标签: jquery-plugins symfony1 symfony-1.4

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

本地使用我的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}匹配路线“主页”(/)for / with parameters array('module'=>'main','action'=>'index' )
  3月16日05:57:42 symfony [错误] {sfParseException}配置文件“D:\ wamp \ bin \ php \ symfony \ symfony14 \ lib / config / config / filters.yml”指定缺少类密钥的类别“flash”。

6 个答案:

答案 0 :(得分:1)

您是否在重定向/转发上下文中调用 executeShowResult 操作?闪存的使用寿命有限,在下一次请求后它将消失。显然, resultsArray 已被刷新。

答案 1 :(得分:1)

您在生产中生成了404(favicon或图像),并且计为404操作(重定向后)清除闪存变量的请求。

答案 2 :(得分:0)

不确定这是不是答案,但是我的filters.yml文件中没有flash密钥,在Symfony 1.4.3应用程序中,我没有触及它,因为抓住版本来自Symfony网站。您是否尝试从yml文件中删除该行,清除缓存并再次尝试?

答案 3 :(得分:0)

@Lunohodov

(很抱歉发布了答案而不是评论,但我不能用这种方式导致字符限制)

以下是行动:

public function executeShowResult()
    {
        $user = $this->getUser();
        $this->forward404Unless($user->hasFlash('resultsArray'));

        $this->results = $user->getFlash('resultsArray');
        $user->setFlash('resultsArray', $this->results);

        $this->pager = new myArrayPager(null, 15);
        $this->pager->setResultArray($this->results);
        $this->pager->setPage($this->getRequestParameter('page'));
        $this->pager->init();

        $this->myModule = $this->getRequestParameter('myModule');
        $this->myTemplate = $this->getRequestParameter('myTemplate');

        $forwardPage = '../../'.$this->getRequestParameter('myModule').'/templates/'.$this->getRequestParameter('myTemplate');
        $this->setTemplate($forwardPage);

        return sfView::SUCCESS;

    }

编辑:另一个有趣的日志。在我设置flash的操作中,我已经设置了一个日志来测试set和hasFlash方法...并且它有效:

$user = $this->getUser();
$user->setFlash('resultsArray', $this->results);
if ($user->hasFlash('resultsArray'))
{
    sfContext::getInstance()->getLogger()->info("The flash is set");
}
else
{
    sfContext::getInstance()->getLogger()->info("The flash is NOT set");
}

该日志:

  

Mar 16 06:07:13 symfony [info]设置了闪光灯

我想我在这里错过了一些大事......

答案 4 :(得分:0)

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

如果你这样做,并且正在缓存with_layout(或者如果flash在操作模板中,然后缓存相关的操作),那么它将在后续视图中返回缓存页面而不显示flash消息。

答案 5 :(得分:0)

请确保use_flash=true

上有factories.yml
user:
  class: myUser
  param:
    timeout:         3600
    logging:         %SF_LOGGING_ENABLED%
    use_flash:       true
    default_culture: %SF_DEFAULT_CULTURE%    

一个非常古老的回复,但我希望对其他有相同问题的人有所帮助。