我无法解决我在函数中出错的问题,而且我想知道是否有任何方法让我找到函数在使用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。
由于
答案 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会接受任何数据,如果该值不存在。
您必须检查表格的结构。