我正在使用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”。
答案 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%
一个非常古老的回复,但我希望对其他有相同问题的人有所帮助。