У меня есть старый проект, который все еще использует Symfony 2. В нем есть форма для редактирования профиля клиента.В контроллере у нас есть это:
$form = $this->createForm(new ClientProfile($remindTimes), $client);
$form->handleRequest($request);
А в классе ClientProfile
у нас есть
class ClientProfile extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('client_name', 'text', array('label' => 'Full name'))
->add('client_address', 'text', array('label' => 'Address', 'required' => false))
->add('client_city', 'text', array('label' => 'City', 'required' => false))
->add('client_post_code', 'text', array('label' => 'Postal index', 'required' => false))
->add('client_email', 'email', array('label' => 'E-mail', 'required' => false));
}
}
... и некоторые другие поля, но вы понимаете суть.Тогда есть также представление Twig, которое отображает HTML.Стандартные вещи, насколько я могу судить.
Теперь для моего требования.Клиентский объект имеет два специальных свойства.Давайте назовем их FroobleEnabled
и FroobleType
.Если Frooble отключен, значение типа не имеет значения (может быть установлено в 0).В пользовательском интерфейсе я хочу раскрывающийся список со значениями:
Disabled
Type 1
Type 2
Type 3
Если пользователь выбирает Disabled
, тогда FroobleEnabled
устанавливается на false
, а FroobleType
устанавливается на 0
.В противном случае FroobleEnabled
устанавливается на true
и FroobleType
на 1
, 2
или 3
соответственно.
Как это сделать?Особенностью этого является то, что это больше не отображение 1: 1.В объекте модели есть два поля, но только один элемент управления пользовательского интерфейса.Я думаю Я мог бы добиться этого с помощью DataMapper
, но я также не хочу вручную отображать все другие поля (хотя я могу, если нет другого варианта).Я также не могу найти приличную документацию о DataMapper
или о любых других функциях Symfony Forms, которые могли бы мне помочь.