1

我目前正在尝试允许用户存档已经完成的事件。

然后将在存档表中查看该事件。

所以基本上我有一个存档表和一个事件表,当用户想要存档事件时,他们应该能够在存档添加表单中查看事件(需要由事件的 $id 填充) .

但我不知道如何填充该字段.. 我尝试设置一个值.. 但事件不是会话,因此不起作用,我也尝试在表单开头设置 $id,但是那也没有用。

这是我在事件控制器中存档功能的代码。

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

1 回答 1

0

您需要执行以下操作之一:

$this->request->data设置控制器中使用的字段的值。

public function add($id = null) {
    if ($this->request->is('post')) {
        [..snip..]
    }
    $this->loadModel('Event');
    $event = $this->Event->read($id);
    $this->request->data['Archive'] = $event['Event'];
}

或者

更新表单以设置值。

使用相同的事件更新现有代码:

public function add($id = null) {
    if ($this->request->is('post')) {
        [..snip..]
    }
    $this->loadModel('Event');
    $this->set('event', $this->Event->read($id));
}

然后在 Archives/add.ctp 文件中的表单中,更新每个输入以反映 $event 的值。

echo $this->Form->input('eventID', array('type' => 'hidden', 'value' => $event['Event']['id']));

或者

编写一个移动记录的函数。

在事件视图上放置一个名为“存档”的按钮。在将归档事件的事件控制器中创建一个方法。

public function archive($id = null) {
    if ($this->request->is('post')) {
        $event = $this->Event->read($id);
        $archive['Archive'] = $event['Event'];
        $archive['Archive']['event_id'] = $archive['Archive']['id'];
        unset($archive['Archive']['id']);
        $this->loadModel('Archive');
        $this->Archive->create();
        if ($this->Archive->save($archive)) {
            $this->Session->setFlash(__('The event has been archived'));
            $this->Event->delete($id);
            $this->redirect(array('action' => 'index'));
        } else {
            $this->Session->setFlash(__('The event could not be archived. Please, contact the administrator.'));
        }
    }
}
于 2013-01-21T18:21:30.607 回答