如何找出函数错误的位置(CAKEPHP)

时间:2013-01-28 16:30:25

标签: cakephp

我无法解决我在函数中出错的问题,而且我想知道是否有任何方法让我找到函数在使用net bean时或者在执行函数时中断的位置。 / p>

如果你想看到这个功能,那么这里有一个副本:

             public function archive($id = null) {
    if ($this->request->is('post')) {
        $event =  $this->Event->read(null, $id);
        $archive['Archive'] = $event['Event'];
        $archive['Archive']['archiveID'] = $event['Event']['eventID'];
        unset($archive['Archive']['archiveID']);
        $this->loadModel('Archive');
        $this->Archive->create();
        if ($this->Archive->save($archive)) {
           // $this->Archive->invalidFields();
            $this->redirect(array('action' => 'eventmanage'));
            $this->Session->setFlash(__('The event has been archived'));
          //  $this->Event->delete($id);  
        } else {
            $this->redirect(array('action' => 'eventmanage'));
            $this->Session->setFlash(__('The event could not be archived, Please, contact the administrator.'));
        }
    }
}

so far i have tried using the `$errors = $this->Archive->validationErrors;` function but all i receive back is the word 'array' 

更新

我已将事件保存为存档,但它不会发送消息$this->Session->setFlash(__('The event has been archived'));并且它不会重定向回事件管理,它会创建一个指向/ Controller / Action / id的新链接,例如/ events / archive / 14。

由于

2 个答案:

答案 0 :(得分:4)

validationErrors属性返回一个数组。您无法在PHP中回显数组对象,因为它是一组数据,而不是可以“只”输出到您的屏幕的东西。还有其他功能可以显示完整数组,例如var_dump()print_r()或CakePHP方法debug()Debugger::dump()。所以尝试这样的事情:

$errors = $this->Archive->validationErrors;
if (!empty($errors)) { debug($errors); }

您还可以使用implode()将所有验证错误输出为flash消息中的字符串,例如:

$this->Session->setFlash(__('The event could not be archived, because of the following errors: ' . implode('<br/>', $errors) . '. Please, contact the administrator.'));

这将显示所有错误,在flash消息中以间隔分隔。

<强>更新 关于您的最新问题更新,未设置Flash消息,因为您在设置之前重定向。所以,声明从未达成。交换控制器中的setFlash和redirect方法,这样你就得到:

$this->Session->setFlash(__('The event has been archived'));
$this->redirect(array('action' => 'eventmanage'));

答案 1 :(得分:0)

我很难理解为

分配值的必要性
$archive['Archive']['archiveID'] = $event['Event']['eventID'];

并在

之后立即取消设置
unset($archive['Archive']['archiveID']);

如果在您的Db'archiveID'中是必需值,那么我不认为MySQL会接受任何数据,如果该值不存在。

您必须检查表格的结构。