Форма CakePHP неправильно отображается в элементе

Я использую элемент для рендеринга формы. Проблема в том, что когда я включаю элемент 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>


person linkyndy    schedule 28.02.2012    source источник
comment
каков код вашего элемента report.ctp файла?   -  person Ofir Baruch    schedule 29.02.2012
comment
Вам нужно будет опубликовать код элемента — это должно быть что-то довольно простое в элементе.   -  person Dave    schedule 29.02.2012
comment
Я разместил код элемента. Я верю, что это что-то маленькое, но не могу понять...   -  person linkyndy    schedule 29.02.2012
comment
Странно, откуда появилась эта строка <div style="display:none;">?   -  person Ofir Baruch    schedule 29.02.2012
comment
Он содержит скрытый ввод, который генерирует Cake. Я отредактировал вопрос сейчас.   -  person linkyndy    schedule 29.02.2012
comment
Я бы попробовал отбросить все лишнее, довести его до сути (без JS... и т. д.) - проверить это, и если все еще не работает, просто опубликовать это.   -  person Dave    schedule 29.02.2012
comment
Дело в том, что весь код из элемента при вставке в фактическое представление работает так, как ожидалось, поэтому я считаю, что в коде элемента нет ничего плохого...   -  person linkyndy    schedule 29.02.2012
comment
Суть не в этом, а в том, чтобы не тратить время людей, которые надеются помочь, имея лишний и несвязанный код, через который им нужно будет разобраться.   -  person Dave    schedule 29.02.2012
comment
Офир попросил код элемента, поэтому я добавил его в свой вопрос :)   -  person linkyndy    schedule 29.02.2012
comment
@linkyndy - просто пытался помочь тебе получить ответ - видимо, он тебе не нужен   -  person Dave    schedule 29.02.2012
comment
Я знаю, но он также пытался помочь, когда спрашивал код, поэтому я не знаю, что не так :) В любом случае, я не могу понять, почему форма отображается неправильно, поскольку это тот же код. .   -  person linkyndy    schedule 29.02.2012
comment
У меня нет причин продолжать спорить - если вам нужна дополнительная/быстрая помощь, проведите небольшое собственное тестирование и сузьте его до кода, который на самом деле связан с проблемой. ГЛ.   -  person Dave    schedule 29.02.2012
comment
У меня была та же проблема, но вместо вызова элемента она была внутри самого моего представления. В моем случае я вызывал создание формы между двумя элементами ‹tr›, поэтому это недопустимое местоположение. Я переместил свое создание чуть выше моего тега ‹table›, а свое закрытие чуть ниже соответствующего тега ‹/table›.   -  person Brett F    schedule 15.03.2013


Ответы (2)


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

</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>
person Chuck Burgess    schedule 29.02.2012
comment
Мне нужна была функциональность AJAX, поэтому я не мог использовать предоставленный вами код. - person linkyndy; 22.03.2013

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

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

Кредиты для этих ответов должны пойти к нему.

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

person El Abogato    schedule 22.05.2016