连接Symfony形式的属性

时间:2018-10-09 11:14:35

标签: php symfony-forms

我具有以下结构的symfony形式。

if (!$propertyId) {
        $form->add('room-type', 'choice', [
            'label' => false,
            'choices' => $this->di->get("roomType")->getRoomByPropertyId($propertyId),
            'placeholder' => 'All Room types',
            'attr' => ['class' => 'room-type-id hidden']
        ]);
    } else {
        $form->add('room-type', 'choice', [
           'label' => false,
           'choices' => $this->di->get("roomType")->getRoomByPropertyId($propertyId),
           'placeholder' => 'All Room types',
           'attr' => ['class' => 'room-type-id']
        ]);
    }

我想对此进行重构,以便在hiddenpropertyId的情况下连接null属性。

像这样的东西以及我尝试过的其他各种组合都行不通。

['class' => 'room-type-id' + isset($propertyId) ? '' : 'hidden']

我该怎么做?

2 个答案:

答案 0 :(得分:1)

我看到您在控制器中有该代码。最好将表单逻辑移到其自己的类中,然后在其中添加私有方法。

private function createChoiceClass($propertyId)
{
    $class = 'room-type-id';
    if (!empty($propertyId) {
        $class .= ' hidden';
    }

    return $class;
}

然后使用构建方法

$form->add(
    ....
    'attr' => ['class' => $this->createChoiceClass($propertyId)],
);

您可以在此处看到如何创建表单类https://symfony.com/doc/3.4/forms.html#creating-form-classes

使用表单类比在控制器中进行维护要容易得多

答案 1 :(得分:0)

我通过使用此代码成功做到了。

'attr' => isset($propertyId) ? ['class' => 'room-type-id'] : ['class' => 'room-type-id hidden']