10

CakePHP 1.3では、複数の送信ボタンを備えたフォームを作成できます。

echo $this->Form->submit('Submit 1', array('name'=>'submit');
echo $this->Form->submit('Submit 2', array('name'=>'submit');

コントローラーで押された送信ボタンを次のように検出します。

if (isset($this->params['form']['submit']) && $this->params['form']['submit'] == "Submit 1") {
  // first button clicked
}

CakePHPでは、$ this-> params ['form']が設定されておらず、クリックされたボタンの値が$ this-> request、$ this-> request-> data、$ this-> params、$のどこにも表示されません。 this->dataまたは$_POST

CakePHP 2.0でクリックされたボタンを確認するにはどうすればよいですか?

前もって感謝します。

編集:

リクエストに応じて、フォームのコードは次のとおりです。

<?php echo $this->Form->create('History', array('action'=>'add')); ?>
<div class='submit'>
<?php 
echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submit')); 
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submit')); 
?>
</div>
<?php echo $this->Form->end()?>

そして、フォームの出力:

<form action="/projects/kings_recruit/trunk/www/histories/add" id="HistoryAddForm" method="post" accept-charset="utf-8">
  <div style="display:none;">
    <input name="_method" value="POST" type="hidden">
  </div>
  <div class="submit">
    <input name="submit" value="Yes" type="submit">
    <input name="submit" value="No" type="submit">
  </div>
</form>
4

4 に答える 4

19

通常、両方の送信ボタンに同じ名前を使用することはお勧めできません。$_POST と $this->request->data に "submit" キーがあるはずです

以下に示すように、CakePHP 2.1.1 でこれをテストしました。

ビューコード:

<?php echo $this->Form->create('Message', array('action'=>'test')); 
//  Extra test input field
echo $this->Form->input('test');
?>

<div class='submit'>
<?php 
echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submit')); 
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submit')); 
?>
</div>
<?php echo $this->Form->end()?>

$this->request->data のコントローラ:

array(
    'submit' => 'Yes',
    'Message' => array(
        'test' => 'TestFieldTest'
    )
)

そして $_POST で:

array(
    '_method' => 'POST',
    'data' => array(
        'Message' => array(
            'test' => 'TestFieldTest'
        )
    ),
    'submit' => 'Yes'
)

2 つの送信に異なる名前を付けることもできます。

echo $this->Form->submit('Yes', array('div'=>false, 'name'=>'submitY')); 
echo $this->Form->submit('No', array('div'=>false, 'name'=>'submitN')); 

このようにして、キーがサブミットの名前になるため、$_POST または $this->request->data でそれらを区別できます。

array(
    'submitY' => 'Yes',
    'Message' => array(
        'test' => 'foo'
    )
)

array(
    '_method' => 'POST',
    'data' => array(
        'Message' => array(
            'test' => 'Bar'
        )
    ),
    'submitY' => 'Yes'
)

次に、どのボタンが押されたかを判断するには、単純な isset($_POST['']) または $this->request->data ? を使用できます。

于 2012-05-04T09:24:27.623 に答える
8

両方の送信ボタンに同じ名前を使用しないでください。次の例を検討してください。

<?php echo $this->Form->create(false); ?>
<?php echo $this->Form->text('input'); ?>
<?php echo $this->Form->submit('Yes', array('name' => 'submit1')); ?>
<?php echo $this->Form->submit('No', array('name' => 'submit2')); ?>
<?php echo $this->Form->end(); ?>

「はい」ボタンをクリックすると、debug($this->request->data) は以下を生成します。

array(
    'submit1' => 'Yes',
    'input' => 'test'
)

そして、これは「いいえ」ボタンがクリックされたときです:

array(
    'submit2' => 'No',
    'input' => 'test'
)

どのボタンがクリックされたかを確認するには:

if (isset($this->request->data['submit1'])) {
    // yes button was clicked
} else if (isset($this->request->data['submit2'])) {
    // no button was clicked
}
于 2012-05-03T22:44:13.350 に答える
1

2.0では、$this->params['form']フォームヘルパーの投稿フィールドがすべて表示されることはなくなりました$this->data(とにかく意味があります)

それで

if (!empty($this->data['submit']) && $this->data['submit'] == "Submit 1") {}

ここでも!empty()の方が優れていることに注意してください。

PS:拡張アップグレードシェルを使用して、コード内で置き換えることができます:https ://github.com/dereuromark/upgrade

そのコマンド

cake Upgrade.Upgrade request

(https://github.com/dereuromark/upgrade/blob/master/Console/Command/UpgradeShell.php#L833)

于 2012-04-16T11:16:04.763 に答える
0
if (!empty($this->request->data['submit']) && $this->request->data['submit'] == "Yes") {
// do your stuff
}
于 2012-04-16T15:44:29.357 に答える