我正在开发一个CakePHP项目,在一个视图中,我在控制器中调用一个方法,如下所示:
var addEnv = "<?php echo $this->Html->url(array('action' => 'controller_method')) ?>";
$.post( addEnv, function( ) {
location.reload();
});
控制器方法如下所示:
public function controller_method()
{
if($this->request->is('post'))
{
$this->someTable->set(array(
'comments' => "PUM"
));
$this->someTable->save();
$this->Session->setFlash(__('DATA SAVED SUCCESSFULLY', true), 'alert-success');
return $this->redirect(array('action' => 'edit'));
}
}
该方法正常工作,并且我被重定向到编辑视图,这是我期望的行为,但是没有显示带有DATA SAVED SUCCESSFULLY文本的消息,成功地在另一个视图上使用了相同的setFlash方法。
为什么我在视图上看不到消息?
答案 0 :(得分:1)
看起来controller_method()正在呈现'action'=>'edit'
的视图(通过重定向)并将其作为对$ .post()的响应返回
渲染&#39;编辑&#39;视图可能包含您的Flash消息,然后您正在使用javascript($ .post中的成功回调)来重新加载页面。自编辑&#39; view已经显示了flash消息,重新加载页面后它不会再显示。
您可以检查$ .post响应以查看您的Flash消息是否在那里。如果是这种情况,请让cake方法响应而不渲染视图。我认为这会奏效:
public function controller_method()
{
if($this->request->is('post'))
{
$this->autoRender = false;
$this->someTable->set(array(
'comments' => "PUM"
));
$this->someTable->save();
$this->Session->setFlash(__('DATA SAVED SUCCESSFULLY', true), 'alert-success');
return;
}
}