我的控制器中有以下代码:
class ContactsController extends AppController {
public $helpers = array('Html', 'Form', 'Session');
public $components = array('Session');
public function index() {
$this->set('contacts', $this->Contact->find('all'));
}
public function view($id) {
if (!$id) {
throw new NotFoundException(__('Invalid contact'));
}
$contact = $this->Contact->findById($id);
if (!$contact) {
throw new NotFoundException(__('Invalid contact'));
}
$this->set('contact', $contact);
}
public function add() {
if ($this->request->is('post')) {
$this->Contact->create();
if ($this->Contact->save($this->request->data)) {
$this->Session->setFlash('Your contact has been saved.');
$this->redirect(array('action' => 'index'));
} else {
$this->Session->setFlash('Unable to add your contact.');
}
}
}
}
在add()方法中,我有一行$this->redirect(array('action' => 'index'));
我希望这一行能够在我的视图中重定向回我的索引页面。但我得到的只是一个空白的白页。
任何帮助表示感谢。
此致 斯蒂芬
答案 0 :(得分:17)
您的代码看起来有效;我没有在您提供的代码中看到错误。
有几个可能的原因;
app/Config/core.php
- Configure::write('debug', 2);
<?php
或?>
之前或之后的(不可见)空格引起的。这将导致“已发送标头”警告,并且浏览器不会重定向。 StackOverflow上有很多关于这种情况的问题,例如:How to fix "Headers already sent" error in PHP 请注意;
在CakePHP中,在任何重定向语句之前放置return
是一种很好的做法;这样可以更好地对您的应用进行单元测试,例如:
return $this->redirect(array('action' => 'index'));
跟踪这些问题可能很麻烦,我会添加一些指示
Auth
或Security
组件,则其中一个可能导致“问题”(例如授权失败或发布的数据标记为“无效”,这将是由'blackHole()'回调处理。在AppController中禁用两者以检查问题是否仍然存在调试代码:
if (headers_sent($file, $line)) {
exit("headers were already sent in file: {$file}, line number: {$line}");
}
答案 1 :(得分:5)
经过大量研究后,我得到了解决方案。
请使用
ob_start();
中的 AppController.php
ob_start();
class AppController extends Controller {
function beforeFilter() {
parent::beforeFilter();
}
}