Я передаю некоторые дополнительные параметры в моей форме, используя OptionsResolverInterface
, Это код для формы:
class OrdersType extends AbstractType {
public function buildForm(FormBuilderInterface $builder, array $options)
{
if ($options['curr_action'] !== NULL)
{
$builder
->add('status', 'choice', array(
'choices' => array("Pendiente", "Leido"),
'required' => TRUE,
'label' => FALSE,
'mapped' => FALSE
))
->add('invoice_no', 'text', array(
'required' => TRUE,
'label' => FALSE,
'trim' => TRUE
))
->add('shipment_no', 'text', array(
'required' => TRUE,
'label' => FALSE,
'trim' => TRUE
));
}
if ($options['register_type'] == "natural")
{
$builder->add('person', new NaturalPersonType(), array('label' => FALSE));
}
elseif ($options['register_type'] == "legal")
{
$builder->add('person', new LegalPersonType(), array('label' => FALSE));
}
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setRequired(array(
'register_type'
));
$resolver->setOptional(array(
'curr_action'
));
$resolver->setDefaults(array(
'data_class' => 'Tanane\FrontendBundle\Entity\Orders',
'render_fieldset' => FALSE,
'show_legend' => FALSE,
'intention' => 'orders_form'
));
}
public function getName()
{
return 'orders';
}
}
И вот как я строю форму на контроллере:
$order = new Orders();
$orderForm = $this->createForm(new OrdersType(), $order, array('action' => $this->generateUrl('save_order'), 'register_type' => $type));
Но я получаю эту ошибку:
Примечание: неопределенный индекс: curr_action in
/var/www/html/tanane/src/Tanane/FrontendBundle/Form/Type/OrdersType.php
линия 95
Зачем? Не является curr_action
необязательный в форме $options
как этот набор кодов?
$resolver->setOptional(array(
'curr_action'
));
Именно так. PHP стреляет NOTICE
при доступе к неизвестному ключу массива.
Чтобы правильно справиться с этим, у вас есть 2 решения:
** 1) Заменить: if ($options['curr_action'] !== NULL)
с if (array_key_exists('curr_action', $options) && $options['curr_action'] !== NULL)
Немного громоздко, но это работает …
2) Другое решение было бы просто определить значение по умолчанию:
$resolver->setDefaults(array(
'data_class' => 'Tanane\FrontendBundle\Entity\Orders',
'render_fieldset' => FALSE,
'show_legend' => FALSE,
'intention' => 'orders_form',
'curr_action' => NULL // <--- THIS
));
Других решений пока нет …