2009-05-29 8 views
3

Symfony 플래시 변수를 잘못 사용하고 있습니까?

동작에서 사용자를위한 몇 가지 피드백을 설정합니다.

 $this->getUser()->setFlash('message', array(
    "type" => "notice", 
    "content" => "Well done buddy, you did it." 
    )); 

    $this->redirect('home/index'); 

보기에서 다음 코드를 사용합니다.

<?php if ($sf_user->hasFlash('message')): $message = $sf_user->getFlash('message') ?> 
    <p class="<?php echo $message["type"] ?>" ><?php echo $message["content"]?></p> 
<?php endif; ?> 

그러나 메시지가 나타나지 않습니다.

문제가 '한 번 나타나면 문제가 발생하지 않습니다. 문제가 발생하지 않는다면 문제가 사라집니다. 문제는 결코 나타나지 않는다는 것입니다. 한 번도.

Symfony 1.2를 사용하고 있습니다. 따라서 플래시 var가 이제 사용자 객체에 바인드됩니다.

답변

2

두 개의 setFlash (배열이 아님) 문자열을 사용해보십시오. 나는 이것이 효과가있을 것이라고 생각한다. Symfony는 템플릿에서 액세스 할 때 배열을 이스케이프 처리합니다. 당신이 얻는 것을 확실하게하려고 var_dump($sf_user->getFlash('message'));을 시도하십시오.

1

Symfony의 깜박임은 페이지에 정확히 한 번만 응답을 표시하는 것입니다. 즉, 메시지가 "깜박"합니다. 페이지가 새로 고쳐지면 해당 플래시는 더 이상 존재하지 않습니다.

그래서 사용자가 양식을 제출 가정 및 조치는 다음 코드

$this->getUser()->setFlash('message', 'Some message here'); 

을 실행 그리고보기 그런 다음

# Note: getFlash returns "" if flash is not set 
echo $sf_user->getFlash('message'); 

뷰에이 사용자의 첫 번째 요청이있다 양식을 제출 한 후 플래시를 설정하면 getFlash가 "일부 메시지를 여기에"으로 반환하고 플래시를 제거/설정 해제합니다. 따라서 해당 사용자의 동일한 메시지에 대한 요청은 이제 빈 문자열을 반환합니다.

이것이 의미하는 바는 한 요청에 대해서만 플래시가 지속된다는 것입니다. 양식과 동일한 페이지에 양식 응답을 표시하는 좋은 방법입니다.

+0

나는 플래시가 ephemerial 변수라는 것을 알고있다. 한 번 작동한다는 의미는 아니었지만 웹 페이지를 다시로드했는데 작동하지 않았습니다. 나는 그것이 예상 된 방식으로 한 번 작동했다는 것을 의미했다. 그리고 나서 전체 메카니즘은 더 이상 작동하지 않았다. 어쩌면 나는 soemthing을 바꿨지 만 나는 그럴 기분이 아닙니다. –

+0

나는 혼란을 이해하므로이 answers가 반복되는 것을 피하기 위해 문장을 삭제했습니다. –

관련 문제