2012-02-28 1 views
1

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

<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]"> 
... 

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

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

В чем причина этого?

EDIT

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

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

+0

что код вашего элемента 'report.ctp' файла? –

+0

Вам нужно будет опубликовать код элемента - в элементе должно быть что-то довольно простое. – Dave

+0

Я отправил код элемента. Я считаю, что это что-то маленькое, но не могу понять это ... – linkyndy

ответ

0

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

</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> 
+0

Мне нужна функциональность AJAX, поэтому я не мог использовать предоставленный вами код. – linkyndy

0

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

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

Кредиты для этого ответа должны идти к нему.

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