Установите дополнительные параметры для buildForm

Я передаю некоторые дополнительные параметры в моей форме, используя 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'
));

0

Решение

Именно так. 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
));
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]