1

現在、ユーザーが既に完了したイベントをアーカイブできるようにしようとしています。

その後、イベントがアーカイブ テーブルに表示されます。

したがって、基本的には 1 つのアーカイブ テーブルと 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 に答える