Несколько кнопок Отправить в форме CakePHP

0

У меня есть форма в виде 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);

Но это приводит только к одной кнопке, которая даже не представит форму, где я ошибаюсь? и может ли каждая кнопка вызывать другой метод в контроллере? заранее спасибо

Теги:
forms
cakephp
cakephp-2.3

5 ответов

5
Лучший ответ

Я не уверен, совместим ли это "технически корректный", совместим с 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]')); ?>

где "Пользователь" - это имя модели.

  • 1
    Я думаю, что было бы хорошо, если бы SO мог заставить людей оставить комментарий при голосовании вверх или вниз. Я получил здесь голосование, но не знаю, кто это сделал и почему?
8

Если вы укажете имя кнопки отправки, она будет иметь это как ключ в данных сообщения, так что вы можете перенаправить эту информацию в начале вашего действия. например

<?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
}
1

Обычно одна форма может иметь только одно действие

эта lmnitation больше не верна в HTML5, где вы можете установить действие формы для каждой кнопки

так: следующий код работает только для браузеров HTML5

echo $this->Form->button(
    'Your Action Description Here', 
    array(
        'type' => 'submit', 
        'formaction' => 'yourActionHere' // 
    )
);
0

Попробуйте это, это легко сделать.

<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>

-1

Попробуйте использовать функцию кнопки 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'));
  • 0
    Как я могу заставить каждую кнопку вызывать разные методы в контроллере?
  • 0
    Почему вы хотите это сделать? Вы можете просто сохранить и переслать после завершения сохранения. Либо на той же странице с формой (Создать новый) или в индекс (Сохранить и закрыть). См. Stackoverflow.com/questions/3810124/one-form-two-action . Это трудно сделать и плохая практика.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню