플래시 메시지가 표시되지 않으면 수동 렌더링을 사용하십시오
CakePHP플래시 메시지는 Controller 클래스
$this->Session->setFlash('Message')
에서 처리 성공 여부 등을 출력할 수 있는 편리한 기능이지만 학급 규모가 커지면서 방법의 분할 등이 시작되면 정상적으로 표시되지 않는다.푹 빠져서 해결책을 적어놓을게요.### 문제가 발생한 경우
public function add() {
if ($this->request->is('post')) {
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash('Success!');
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash('Failed!');
}
}
}
이렇게 add()
만 완성하면 문제없다.이 소스는 비대해져서 다음과 같이 되면 문제가 생길 수 있다.public function add() {
/* 何らかの処理 */
if ($this->request->is('post')) {
$this->_otherMethod();
}
}
protected function _otherMethod() {
/* 何らかの処理 */
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash('Success!');
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash('Failed!');
}
}
이 상태에서 add()
의 처리에서 _otherMethod()
의 처리로 옮길 때 먼저 재현한다.즉
setFlash()
조작 전에 default.ctp
를 호출하기 때문에 플래시 메시지를 출력하지 않는다는 것이다.### 해결 방법
처리
_otherMethod()
가 완료되면 렌더링하는 것이 좋습니다. 따라서 자동 렌더링을 해제해야 합니다.public function add() {
$this->autoRender = false; // この行を追加
/* 何らかの処理 */
if ($this->request->is('post')) {
$this->_otherMethod();
}
}
protected function _otherMethod() {
/* 何らかの処理 */
if ($this->Post->save($this->request->data)) {
$this->Session->setFlash('Success!');
$this->autoRender = true; // この行を追加
$this->redirect(array('action'=>'index'));
} else {
$this->Session->setFlash('Failed!');
$this->autoRender = true; // この行を追加
}
}
처리 전후 작업$this->autoRender
을 하면 원하는 처리 순서와 출력에 따른다.
Reference
이 문제에 관하여(플래시 메시지가 표시되지 않으면 수동 렌더링을 사용하십시오), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/okunokentaro/articles/01ejkz00139ydfbwtfxtxrzgcj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)