Reputation: 188
Hello I'm trying to make dynamical form and I have some problems.. I have been trying to follow http://symfony.com/doc/current/cookbook/form/dynamic_form_modification.html and some related tutorials but without result.
Currently I'm getting following error:
Catchable Fatal Error: Argument 2 passed to UserBundle\Form\Type\CompanyRegistrationFormType::UserBundle\Form\Type{closure}() must be an instance of UserBundle\Entity\Sector, instance of UserBundle\Entity\Company given, called in UserBundle/Form/Type/CompanyRegistrationFormType.php on line 82 and defined
I have 3 entity table:
Company.php
/**
* @ORM\OneToMany(targetEntity="Sector", mappedBy="company")
*/
protected $sector;
Sector.php
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(name="name", type="string")
*/
protected $name;
/**
* @ORM\ManyToOne(targetEntity="Company", inversedBy="sector")
*/
protected $company;
/**
* @ORM\OneToMany(targetEntity="MainCategory", mappedBy="sector")
*/
protected $mainCategory;
MainCategory.php
/**
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
protected $id;
/**
* @ORM\Column(type="string")
*/
protected $name;
/**
* @ORM\ManyToOne(targetEntity="Sector", inversedBy="mainCategory")
*/
protected $sector;
FormType.php
$builder->add('sector', 'entity', array(
'class' => 'UserBundle:Company'));
$formModifier = function (FormInterface $form, Sector $sector = null) {
$mainCategories = null === $sector ? array() : $sector->getAvailableMainCategories();
$form->add('mainCategory', 'entity', array(
'class' => 'UserBundle:Sector',
'choices' => $mainCategories));
};
$builder->addEventListener(
FormEvents::PRE_SET_DATA,
function (FormEvent $event) use ($formModifier) {
$data = $event->getData();
$formModifier($event->getForm(), $data);
});
$builder->get('sector')->addEventListener(
FormEvents::POST_SUBMIT,
function (FormEvent $event) use ($formModifier) {
$sector = $event->getForm()->getData();
$formModifier($event->getForm()->getParent(), $sector);
});
and twig:
{{ form_row(form.sector) }} {# <select id="company_sector" #}
{{ form_row(form.mainCategory) }} {# select id="company_mainCategory" #}
<script>
var $sector = $('#company_sector');
$sport.change(function(){
var $form = $(this).closest('form');
var data = {};
data[$sector.attr('name')] = $sector.val();
$.ajax({
url : $form.attr('action'),
type : $form.attr('method'),
data : data,
success: function(html) {
$('#company_mainCategory').replaceWith(
$(html).find('#company_mainCategory'));
}
});
});
</script>
Line 82
$formModifier($event->getForm(), $data);
if I change it to
$formModifier($event->getForm(), $data->getSector());
I get following error:
Notice: Undefined property: UserBundle\Entity\Company::$mainCategory
can someone help me out? Thanks for your time!
Upvotes: 2
Views: 92
Reputation: 533
$builder->add('sector', 'entity', array(
'class' => 'UserBundle:Company'));
You have to pass in class parameter classname associated with entity Sector (i suppose UserBundle:Sector
)
Documentation for symfony2 entity field type
Upvotes: 1