Форма CakePHP неправильно отображается в элементе - PullRequest
1 голос
/ 29 февраля 2012

Я использую элемент для визуализации формы.Проблема в том, что когда я включаю элемент echo $this->element('report', array('id' => $id, 'title' => $title));, форма выглядит следующим образом:

<form id="BugAdminIndexForm" class="form-vertical" accept-charset="utf-8" method="post" action="/admin/stations"></form>
<div style="display:none;">
    <input type="hidden" value="POST" name="_method">
</div>
<input id="BugType" type="hidden" value="database" name="data[Bug][type]">
...

Таким образом, форма закрывается до того, как все входные данные будут обработаны.

При тестировании формы отдельнов представлении (без включения в элемент) он отображается правильно с тем же кодом (кроме вызова элемента).

В чем причина?

РЕДАКТИРОВАТЬ

Вот код элемента:

<div class="modal fade" id="modal-<?php echo $id; ?>">
<div class="modal-header">
    <a class="close" data-dismiss="modal">&times;</a>
    <h3>Report bug</h3>
</div>
<div class="modal-body">
    <?php echo $this->Form->create('Bug', array('class' => 'form-vertical')); ?>
        <?php
            echo $this->Form->hidden('type', array('value' => 'database'));
            echo $this->Form->hidden('title', array('value' => $title));

            echo $title;

            echo $this->Form->input('bug', array('div' => 'control-group', 'label' => array('text' => 'Bug', 'class' => 'control-label'), 'between' => '<div class="controls">', 'after' => '</div>', 'format' => array('before', 'label', 'between', 'input', 'error', 'after'), 'error' => array('attributes' => array('wrap' => 'span', 'class' => 'help-inline'))));
        ?>  
        <?php echo $this->Js->submit('Send', array(
            'url' => array('superuser' => true, 'controller' => 'bugs', 'action' => 'report'),
            'type' => 'json',
            'success' => '
                if(data === true){
                    $("#modal-'.$id.' .modal-body").html("thanks"); 
                } else if(data === false){
                    $("#modal-'.$id.' .modal-body").html("error");  
                } else {
                    $.each(data, function(field, error){
                        $input = $("#modal-'.$id.' .modal-body #Bug" + field.charAt(0).toUpperCase() + field.slice(1));
                        $input.after("<p class=\"help-block\">" + error + "</span>");
                        $input.closest(".control-group").addClass("error");
                    }); 
                }
            ',
            'div' => false
        )); ?>
    <?php echo $this->Form->end(); ?>
</div>
<div class="modal-footer">
</div>

Ответы [ 2 ]

0 голосов
/ 22 мая 2016

У меня была та же проблема, но в представлении, и комментарий, добавленный Бреттом Ф., помог мне.

Мое создание было включено в таблицу.Я переместил как Form-> Create, так и Form-> end как раз перед таблицей, так и после нее, соответственно, и все заработало как положено.

Кредиты за эти ответы должны достаться ему.

В моем случае, CakePHP 3.2.7

0 голосов
/ 29 февраля 2012

Измените свой элемент на следующий, чтобы увидеть, если он выглядит правильно:

</div>
<div class="modal-body">
    <?php 
        echo $this->Form->create('Bug');
        echo $this->Form->hidden('type', array('value' => 'database'));
        echo $this->Form->hidden('title', array('value' => $title));
        echo $this->Form->input('bug');
        echo $this->Form->end('Submit'); 
    ?>
</div>
<div class="modal-footer">
</div>
...