У меня есть эта форма:
class BillType extends AbstractType
{
/**
* @param FormBuilderInterface $builder
* @param array $options
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('user')
->add('numberPlate')
->add('servicesPerformed', CollectionType::class, array(
'label' => false,
'entry_type' => ServicePerformedType::class,
'allow_add' => true,
))
->add('Save', SubmitType::class)
;
/**
* @param OptionsResolver $resolver
*/
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'DefaultBundle\Entity\Bill'
));
}
ServicePerformedType
class this:
class ServicePerformedType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('description', TextareaType::class, array('label' => false))
->add('price', TextType::class, array('label' => false))
->add('quantity', TextType::class, array('label' => false));
}
}
И этот шаблон для отображения формы:
{{ form(form) }}
<a href="#">Add service</a>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.0/jquery.min.js"></script>
<script type="text/javascript">
var index = 0;
$('a').on('click', function() {
var prototype = $('#bill_servicesPerformed').data('prototype');
prototype = prototype.replace(/_name_/g, index.toString());
$('#bill_servicesPerformed').html(prototype);
index++;
})
</script>
Как сказано в docs, чтобы получить собственный прототип, я должен добавить строки ниже в верхней части моего шаблона:
{% form_theme form _self %}
{% block _servicesPerformed_entry_widget %}
I WILL WRITE MY CUSTOM PROTOTYPE HERE
{% endblock %}
Но когда я нажимаю Add service
, я не получаю текст I WILL WRITE MY CUSTOME PROTOTYPE HERE
, но description
, fields
и quantity
, связанные с классом ServicePerformedType
, как и раньше..
ПРИМЕЧАНИЕ: возможно, есть другие способы создания прототипа формы, но я заинтересован в этом, поэтому очень благодарен тому, кто дал решение, связанное с этим, с прототипами пользовательских форм, спасибо.