在 Symfony 表单中连接属性

Concatenate attributes in 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']
        ]);
    }

我想重构它,以便在 propertyIdnull 时连接 hidden 属性。

像这样的方法和我尝试过的其他各种组合都不起作用。

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

我怎样才能做到这一点?

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

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

    return $class;
}

然后在构建方法中

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

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

使用表单 classes 比在控制器中更容易维护

我使用这段代码设法做到了。

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