Объединенные атрибуты в формах Symfony - PullRequest
0 голосов
/ 09 октября 2018

У меня есть форма 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']
        ]);
    }

Я хочу реорганизовать это, чтобы я мог объединить атрибут hidden, если propertyId равно null.

Нечто подобное и различные другие комбинации, которые я пробовал, не работают.

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

Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 09 октября 2018

Мне удалось сделать это с помощью этого кода.

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

0 голосов
/ 09 октября 2018

Я вижу, что у вас есть этот код в контроллере.Было бы лучше переместить логику формы внутрь ее собственного класса, а затем добавить в нее закрытый метод.

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

Работать с классами форм гораздо проще, чем если бы вы делали это в контроллере

...