从一个控制器填充字段,在另一个控制器中填充.. CAKEPHP

时间:2013-01-21 17:48:43

标签: php forms cakephp cakephp-2.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.'));
            }
        }
    }

1 个答案:

答案 0 :(得分: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'];
}

OR

更新表单以设置值。

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

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']));

OR

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

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

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.'));
        }
    }
}