У меня есть форма в виде cakephp, которая хорошо сохраняется с помощью одной кнопки, вот код в view book_form.ctp
echo $this->Form->create
(
'Book',
array
(
'url' => array
(
'controller' => 'Books',
'action' => 'save_record'
),
'class' => 'span12 the_ajaxform',
'inputDefaults' => array
(
'label' => false,
'error' => false
)
)
);
.
.
// form fields
.
.
$options =array(
'label' => __('Save'),
'class' => 'btn btn-primary',
'id'=>'saveform'
);
echo $this->Form->end($options);
.
.
Это работает отлично! Теперь я хотел добавить две кнопки в этой форме, и это то, что я сделал
$options =array(array(
'label' => __('Save & Close'),
'class' => 'btn btn-primary',
'id'=>'saveform'
),
array(
'label' => __('Save & Create New'),
'class' => 'btn btn-primary',
'id'=>'saveformnew'
)
array(
'label' => __('Cancel'),
'class' => 'btn btn-primary',
'id'=>'formcancel'
));
echo $this->Form->end($options);
Но это приводит только к одной кнопке, которая даже не представит форму, где я ошибаюсь? и может ли каждая кнопка вызывать другой метод в контроллере? заранее спасибо
Я не уверен, совместим ли это "технически корректный", совместим с HTML4, 5 и т.д., Но я всегда делал это примерно так, без каких-либо проблем:
<?php echo $this->Form->submit('Delete it', array('name'=>'User[formaction]')); ?>
<?php echo $this->Form->submit('Undelete Selected', array('name'=>'User[formaction]')); ?>
<?php echo $this->Form->submit('Purge Selected', array('name'=>'User[formaction]')); ?>
где "Пользователь" - это имя модели.
Если вы укажете имя кнопки отправки, она будет иметь это как ключ в данных сообщения, так что вы можете перенаправить эту информацию в начале вашего действия. например
<?php echo $this->Form->submit('btn1value', array('name'=>'btn1'))?>
<?php echo $this->Form->submit('btn2balue', array('name'=>'btn2'))?>
нажатие первой кнопки даст данные сообщения, такие как:
array(
[btn1] => btn1value
[YourModel] => array(...)
)
Это позволяет сделать что-то вроде:
if (isset($this->request->data['btn1'])) {
// btn1 was clicked
} else if (isset($this->request->data['btn2'])) {
// btn2 was clicked
}
Обычно одна форма может иметь только одно действие
эта lmnitation больше не верна в HTML5, где вы можете установить действие формы для каждой кнопки
так: следующий код работает только для браузеров HTML5
echo $this->Form->button(
'Your Action Description Here',
array(
'type' => 'submit',
'formaction' => 'yourActionHere' //
)
);
Попробуйте это, это легко сделать.
<div class="submit">
<?php echo $this->Form->submit(__('Submit', true), array('name' => 'ok', 'div' => false)); ?>
<a href="link_to_go"><?php echo $this->Form->button('Cancel', array('type' => 'button'));?></a>
Попробуйте использовать функцию кнопки FormHelper, чтобы создать кнопку отправки и другие кнопки и просто завершить вызов после этого без каких-либо параметров. Это выведет кнопки и закончит вашу форму для вас.
См.: FormHelper :: button
например:
echo $this->Form->button('Save & Close', array('type' => 'submit'));
echo $this->Form->button('Save & Create New', array('type' => 'button'));
echo $this->Form->button('Cancel', array('type' => 'reset'));