2015-08-31 3 views
0

Я использую CakePHP 2.3.8, и я пытаюсь создать форму с динамически добавленными входами от this tutorial, но у меня возникают некоторые проблемы. Добавление и удаление входов работает очень хорошо, но когда я отправляю форму, я получаю сообщение об ошибке черной дыры. При проверке входов это не выглядит так, как если бы значение ключа было неправильно настроено и вызывало некоторые проблемы с идентификаторами входов.Входы динамической формы CakePHP

Например, с помощью этого кода в элементе

//Elements/users.ctp 
$key = isset($key) ? $key : '<%= key %>'; 

<tr> 
    <td><?php echo $this->Form->input("Role.{$key}.user_id", array('options' => $users, 'label' => false)); ?></td> 
    <td class="actions"> 
     <a href="#" class="remove">Remove User</a> 
    </td> 
</tr> 

это выбор, который генерируется

<select name="data[Role][0][user_id]" id="Role<%=Key%>UserId"> 

Редактировать

значение $ ключа создается правильно on /Elements/users.ctp. Я могу создать строку и повторить вывод ключа $, и число для строки будет отображаться правильно. Как вы можете видеть выше, имя элемента задано правильно, но идентификатор все еще задается странным образом.

Имя элемента выбора устанавливается правильно, но не идентификатор. Что вызывает идентификатор select Role<%=Key%>UserId, а не Role0UserId?

+0

«Я пытаюсь создать форму с динамически добавленными входами ... но когда я отправлю форму, я получаю сообщение об ошибке черной дыры «Вообще-то, это не сработает. Вы не можете использовать компонент безопасности (без скрипта с конфигурацией) с динамическими полями формы. Не используйте хелпер формы для генерации входных данных, которые не соответствуют формату CakePHP (вы пытаетесь вставить переменную в id, а вспомогательный элемент формы не предназначен для этого). – AD7six

ответ

2

Проблема:

Если вы заметили сгенерированного выберите тег, который размещен в вопросе, он показывает

<%=Key%> 

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

<%= key %> 

Ввод формы CakePHP заменяет символы html и пространство этой подчеркивающей переменной, следовательно, ее n ot обнаруживается библиотекой подчёркивания.

Решение:

Для того, чтобы исправить эту проблему, необходимо использовать простой HTML-код для шаблона части. Ваш grades.ctp должен быть таким, как показано ниже (частичный код для понимания)

<?php if (isset($key)) : ?> 
    <tr> 
     <td> 
      <?php echo $this->Form->input("Grade.{$key}.id") ?> 
      <?php echo $this->Form->input("Grade.{$key}.subject", array('label' => false)); ?> 
     </td> 
    </tr> 
    ...rest of the code 
<?php else: ?> 
    <tr> 
     <td> 
      <input type="hidden" id="Grade<%= key %>Id" name="data[Grade][<%= key %>][id]">  
      <div class="input text required"> 
       <input type="text" required="required" id="Grade<%= key %>Subject" maxlength="200" name="data[Grade][<%= key %>][subject]"> 
      </div> 
     </td> 
     ...rest of the code 
    </tr> 
<?php endif; ?> 
+0

Использование подчеркивания для этого кажется немного глупым, это _just_ копирование фрагмента dom и изменение id/name - (т.е. это в принципе 'template = $ ('# Grade0Id'). Parent ('tr'); copy = template. clone(). find ('input'). attr ('id', incrementIt) .attr ('name', incrementThat); copy.appendTo (template.parent()); ') '. +1 в любом случае, так как это то, что было задано. – AD7six

+0

Спасибо, вот и все! Мне никогда не приходило в голову, что помощник формы, вероятно, дезинформировал данные перед созданием формы. В конце концов, я думаю, неважно, отключил ли я функции безопасности для этого ввода. – user1104854

+0

@ AD7six. соглашаюсь с вами, для этой незначительной цели, подчеркивание не требуется, jquery достаточно, я просто ответил на вопрос. – MotsManish

Смежные вопросы