Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CakePHP 2.0 Determine which submit button has been clicked

In CakePHP 1.3 you can create a form with multiple submit buttons:

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

and detect which submit button was pressed in the controller with:

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

In CakePHP, $this->params['form'] isn't set and the clicked button value doesn't appear anywhere in $this->request, $this->request->data, $this->params, $this->data or $_POST.

How do I determine which button has been clicked in CakePHP 2.0?

Thanks in advance.

Edit:

As requested, here's the code for the form:

<?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()?>

And the output of the form:

<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>
like image 956
RichardAtHome Avatar asked Apr 16 '12 10:04

RichardAtHome


1 Answers

Don't use the same name for both submit buttons. Consider this example:

<?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) will produce the following when the "Yes" button is clicked:

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

And here it is when the "No" button is clicked:

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

To check which button was clicked:

if (isset($this->request->data['submit1'])) {
    // yes button was clicked
} else if (isset($this->request->data['submit2'])) {
    // no button was clicked
}
like image 69
Hoff Avatar answered Oct 23 '22 11:10

Hoff