読者です 読者をやめる 読者になる 読者になる

log

日記です

CakePHP2.0でsubmitを2つ使いたい

CakePHP1.3からの変わったこと

先にCakePHP2.0で変わった部分を。
CakePHP1.3の時は

  • $this->params['form']['submit']

などで値を取ってこれたのですが、CakePHP2.0だと

  • $this->params['data']['submit']

もしくは

  • $this->request->data['submit']

で値を取ってこれるようです。
構造変わったんですね。
CakePHP2.0を使ってるときは、ぐぐり時に注意です。
どのSubmitボタンを押されたか判定するときにこの値を使います。

流れ

Viewでやること

  • name属性の異なるsubmitボタンを複数作成

Controllerでやること

  • 意図するname属性に値が入っているかを調べる。isset()で。
  • それに応じて処理を変える。

Viewでやること

普通、$this->Form->end();でsubmitを出力しますが、$this->Form->submit();でもsubmitボタンを作成できます。

<?php echo $this->Form->create('Hoge');?>

<?php echo $this->Form->input('title', array('label' => '件名')); ?>
<?php echo $this->Form->input('username', array('label' => '名前')); ?>

<?php echo $this->Form->submit('修正', array(
    'div'=>false,
    'class' => 'btn btn-primary',
    'name' => 'submit')); ?>
<?php echo $this->Form->submit('削除', array(
    'div'=>false,
    'class' => 'btn btn-danger',
    'name' => 'delete')); ?>

<?php echo $this->Form->end(); ?>

Controllerでやること

どのsubmitボタンが押下されたかを、判定して処理を振り分ける。

<?php
public function edit($id = null) {

    // Postリクエストであるかどうか
    if($this->request->isPost() || $this->request->isPut()) {

        if(!empty($this->data)) {
            // deleteのsubmitボタンを押された時の処理
            // if(isset($this->params['data']['delete'])) { //これでもいける
            if(isset($this->request->data['delete'])) {
                $this->Hoge->delete($this->data['Hoge']['id']);
                $this->Session->setFlash($this->data['Hoge']['id'].'を削除しました');
                $this->redirect(array('action' => 'index'));
                return;
            }
            if($this->Hoge->save($this->data)) {
                $this->Session->setFlash('保存しました');
                $this->redirect(array('action' => 'index'));
                return;
            }
        }
    $this->Session->setFlash('保存に失敗しました');

    } else {
        if(!is_null($id)) {
            $this->data = $this->Hoge->findById($id);
        }
    }
}

動くか確認してないっすww

修正

2012-06-11
Controllerと書くべきところをModelと書いていたので修正しました。