3

I have this EntityType field on my UserType's form:

public function buildForm(FormBuilderInterface $builder, array $options)
{
        $builder->add('country', EntityType::class, array(
             'class' => Country::class,
             'choice_label' => 'nicename'
        ));
}

How can i use validation constraints to validate this type of field in the way that user can only select a value in the range of all rows of country's table? I think that I should use Choice constraint with callback, and call the getAllCountries function inside my CountryRepository class. So what's the best way to manage this scenario?

Somethins like this:

// UserEntity.php

class User {

     /**
     * @Assert\Choice(callback="App\Repository\CountryRepository", "getAllCountries")
     * @ORM\ManyToOne(targetEntity="App\Entity\Country", inversedBy="users")
     */
    protected $country;
}

But CountryRepository is not a static function!!

Mintendo
  • 557
  • 1
  • 8
  • 24

1 Answers1

3

Entity field doesn't allow to select invalid value (if you have invalid value it would't find the entity -> wouldn't be able to send form). This is as well behaviour of choice type.

But for callback, there is special callback constraint - https://symfony.com/doc/current/reference/constraints/Callback.html which can be used to call constraint function.

M. Kebza
  • 1,488
  • 1
  • 10
  • 14
  • So if the user manipulate the dom and add another element to the entity select box, the form validation automatically should send an error? – Mintendo May 05 '18 at 15:17
  • 1
    yes, you can see in this [thread](https://stackoverflow.com/questions/32628035/allow-to-add-a-new-value-in-a-choice-field-type) that you need to take extra steps if you wanna add value to your choice list dynamically based on send form. – M. Kebza May 06 '18 at 02:37