4

私はcakephp 2を使用しています。

フォーム ヘルパーの postLink 関数を使用してレコードを更新することはできますか? 基本的に、レコードの「承認済み」フィールドを1に変更する「承認」ボタンが必要です。

私が見つけることができるものはすべて、削除機能の実行にのみ関連していますか? ドキュメントも詳細には触れていません。

事前に感謝します。

私のコード:

<?php echo $this->Form->postLink(__('Approve'), array(
                                     'controller' => 'expenseclaims',
                                     'action' => 'edit', $expenseClaim['ExpenseClaim']['id'],
                                     'approved' => '1',                                                     
                                     'approved_by' => $adminUser,
                                 ), array(
                                     'class' => 'btn btn-danger'
                                 ), __('Are you sure you want to Approve # %s?',$expenseClaim['ExpenseClaim']['id']
                                )); ?>

新しいコード: 投稿リンクを表示:

<?php echo $this->Form->postLink(__('Approve'), array('action' => 'approve', $expenseClaim['ExpenseClaim']['id'], 'admin' => true), array('class' => 'btn btn-danger'), __('Are you sure you want to Approve # %s?',$expenseClaim['ExpenseClaim']['id']));
                                ?>

コントローラーコード:

public function admin_approve($id = null) {

    debug($this->request);

    $this->ExpenseClaim->id = $id;
    if (!$this->request->is('post') && !$this->request->is('put')) {
        throw new MethodNotAllowedException();
    }

    if (!$this->ExpenseClaim->exists()) {
        throw new NotFoundException(__('Invalid expense claim'));
    }

    if ($this->request->is('post') || $this->request->is('put')) {

        $this->request->data['ExpenseClaim']['approved'] = '1';
        $this->request->data['ExpenseClaim']['approved_by'] = $this->Auth->user('id');

        if ($this->ExpenseClaim->save($this->request->data)) {
            $this->Session->setFlash('The expense claim has been Approved', 'flash_success');
            $this->redirect(array('action' => 'index', 'admin' => true));
        } else {
            $this->Session->setFlash('The expense claim could not be approved. Please, try again.', 'flash_failure');
        }
    } 
}
4

1 に答える 1

3

はい、もちろんそれは可能です。

のようなものに投稿するだけです

/expenseclaims/approve/id

approveたとえば、アクションをトリガーするには:

public function approve($id = null) { 
    if (!$this->request->is('post') && !$this->request->is('put')) {
        throw new MethodNotAllowedException();
    }
    //validate/save
}

もちろん、より一般的にすることもできます

于 2012-08-21T11:51:39.437 に答える