控制器内部存在Symfony检查表单字段

时间:2015-09-29 10:38:51

标签: forms symfony

有没有办法检查控制器中是否存在表单字段?

我有一些提交按钮,但根据对象中的数据,将显示和创建相关的按钮。

FormType.php

$builder->addEventListener(FormEvents::POST_SET_DATA, function (FormEvent $event) {
    /** @var ObjectInfo $tab */
    $tab = $event->getData();
    $form = $event->getForm();

    if (some condition) {
        //No Value has been set or NULL
        $form->add('submit_second', 'submit', array(
            'label' => 'submit',
        ))
    }

Controller.php这样

 if ($overviewForm->get('submit_second')->isClicked()) {
     // do something
 }

我也试过

if (
    !is_null($overviewForm->get('submit_second')) && 
    $overviewForm->get('submit_second')->isClicked()
) {

提交我

错误

Child "submit_second" does not exist.

3 个答案:

答案 0 :(得分:4)

如果$form->has('field')(由@jahller建议)不起作用,您可以尝试将逻辑用于" 某些条件"进入你的实体/模型的方法,然后在你需要的地方调用该方法。

您应该可以访问FormTypeController中的模型/实体。

答案 1 :(得分:0)

您还可以使用try catch。我真的不确定何时引入了OutOfBounds异常。但我在3.4

中使用它
try {
    $field = $form->get('nonExistantChild');
    // Then you know the field exists
} catch (Symfony\Component\Form\Exception\OutOfBoundsException $e) {
    // Field doesn't exists.
}

答案 2 :(得分:0)

您可以处理数据,因为无论如何大部分时间都需要它。

if (!array_key_exists('nonExistantChild', $data = $event->getData())) { 
    // No need to do anything then
    return; 
}

// Can now do something with $data then