Degu
Degu

Reputation: 188

Symfony dynamical forms

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

Answers (1)

wbars
wbars

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

Related Questions