Symfony 2 Create a entity form field with 2 properties

PedroHCan picture PedroHCan · Oct 25, 2012 · Viewed 12.1k times · Source

I am using symfony2 and have a form to save the relation of one user to some rules. These rules are set by the admin user of the company. In this form, after I selected a user to update, I have to select which rule this user have permission.

The problem is that I may have more then one rule with the same name (it's another entity) but the values are different. So, when I build the selectbox I must show the name and the value like:

  1. Quantity of items - 10
  2. Quantity of items - 20
  3. Value of the item - 200
  4. Value of the item - 500

But now I just can show without the "- $value" using the code bellow:

$form = $this->createFormBuilder()->add('myinput', 'entity', array(
                    'class' => 'myBundle:Rule',
                    'property' => 'childEntity.name',
                    'label' => 'Filas Permitidas',
                    'expanded' => false,
                    'multiple' => true,
                    'choices' => $this->getDoctrine()
                            ->getRepository('MyBundle:Rule')
                            ->findAll(),
                    'required' => true,
                ))->getForm();

So, as property I wanted to get $myEntity->getChildEntity()->getName() and the $myEntity->getValue().

Is there some way to do this?

Answer

Vadim Ashikhman picture Vadim Ashikhman · Oct 25, 2012

Yes, define a getUniqueName() method in the entity class like:

public function getUniqueName()
{
    return sprintf('%s - %s', $this->name, $this->value);
}

And edit the property form option:

'property' => 'childEntity.uniqueName',

You also can omit the property option and define the __toString() method same way in order to not repeat the setting of the property option in every form.