Наконец я сделал это в конструкторе родительского класса формы (в сущности):
$this->envios = new \Doctrine\Common\Collections\ArrayCollection();
for ($i = 0; $i < count(self::$KILOS); $i++) {
$peso = new TarifaPeso();
$peso->setKilosMaxlim(self::$KILOS[$i]);
$this->addPeso($peso);
}
имея $ килограмм:
private static $KILOS = array(1,2,3,5,10,15,20,25,30,35,40,45,50,55,60,65,70,75,80,85,90,95,100,300,500,1000,1001);
Таким образом, я могу изменить форму с eventListener таким образом:
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('precio', null, array(
'attr' => array('autofocus' => true),
'label' => 'label.precio ' ,
));
;
$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event)
{
$form = $event->getForm();
$data = $event->getData();
if ($data) {
$valor = $data->getKilosMaxlim();
$field = $form->get('precio');
$config = $field->getConfig();
$options = $config->getOptions();
$options['label'] = 'Valor para '.$valor; // change the label
$form->add($field->getName(), $config->getType()->getName(), $options);
}
});
}
Вместо того, чтобы использовать класс объектов «Tarifa» в качестве базового класса данных для формы, вы делаете ano два класса, скажем «[ваш комплект]/Форма/Модель/Тарифа» и «[ваш комплект]/Форма/Модель/TarifaPeso». Затем вы добавляете 20 ТарифаПесо в Тарифа и показываете форму. Когда форма отправлена, выберите все данные из Тарифа, создайте экземпляр и сохраните свои объекты. Сделайте сервис для этого, не делайте этого в контроллере. –