Как включить атрибут «класс», отображающий форму

У меня есть контактная форма, и я пытаюсь ввести класс для ввода моей формы.

Это в ContactType:

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('name', TextType::class);
}

public function configureOptions(OptionsResolver $resolver)
{
    $resolver->setDefaults([
        'data_class' => Contact::class,
    ]);
}

А это в моей ветке:

{{ form_start(form) }}
   {{ form_widget(form.name, {attr: {class: 'myclass', placeholder: 'name'} }) }}
{{ form_end(form) }}

Я получаю этот html:

<input type = "text" class = "form-control" id = "contact_name" name = "contact[name]" required = "required" placeholder = "name">

Он работает для заполнителя, но не для класса. Я попытался поместить attr в билдер, и это то же самое. Класс form-control перезаписывает мой класс? Как я могу это исправить?

Возможный дубликат Как установить атрибут класса для ввода формы Symfony2

DarkBee 09.07.2019 09:53

В вашем конструкторе должно быть нечто большее, чем та строка, которую вы нам дали, управление формой не возникает из ниоткуда, как насчет добавления класса в конструктор?

Dylan Kas 09.07.2019 09:55

@DylanKas Я пытался добавить класс в конструктор, и это то же самое.

Rafael Estrada 09.07.2019 10:14

Я предполагаю, что класс «form-control» исходит из вашей глобальной темы формы (которая может быть чем-то, что вы написали сами, или просто используете какой-то предопределенный, например, bootstrap, который делает такие дополнения). Таким образом, тема формы будет тем местом, где это можно исправить (либо исправить свою собственную, либо расширить и исправить предопределенную).

ejuhjav 09.07.2019 10:26
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Symfony Station Communiqué - 17 февраля 2023 г
Symfony Station Communiqué - 17 февраля 2023 г
Это коммюнике первоначально появилось на Symfony Station , вашем источнике передовых новостей Symfony, PHP и кибербезопасности.
Управление ответами api для исключений на Symfony с помощью KernelEvents
Управление ответами api для исключений на Symfony с помощью KernelEvents
Много раз при создании api нам нужно возвращать клиентам разные ответы в зависимости от возникшего исключения.
1
4
85
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Попробуйте это, если это поможет вам

{{ form_start(form) }}
 {{ form_widget(form.name, {'attr': {'class': 'input-text input-text--white', 'placeholder': 'name'} }) }}
{{ form_end(form) }}

То же самое с кавычками или без них. Обратите внимание, что он получает заполнитель.

Rafael Estrada 09.07.2019 10:41

Я считаю, что вы не можете определить два атрибута на form_wdiget. Обойти это можно как в FormBuilder, так и в FormBuilder.

Вы можете определить атрибуты элемента формы следующим образом:

$builder
    ->add('name', TextType::class, [
        'attr' => [
            'class' => 'my-class',
        ],
    ]);

Обратите внимание, что для класса CSS он должен быть в массиве attr, не путать с классом в вашей сущности, как в EntityType::class.

Или

$builder
    ->add('name', TextType::class, [
        'placeholder' => 'My place holder',
    ]);

Таким образом, вы можете достичь обоих, например:

$builder
    ->add('name', TextType::class, [
        'attr' => [
            'class' => 'my-class',
        ],
        'placeholder' => 'My place holder',
    ]);

Вы можете прочитать больше об атрибутах поля формы здесь.

Спасибо за ответ. Пробовал и этот вариант, но результат тот же.

Rafael Estrada 09.07.2019 11:10

Вы удалили «attr» из form_widget, когда попробовали мои предложения?

MylesK 09.07.2019 11:15

Да, я сделал. Я тоже сначала думал, что проблема в нем.

Rafael Estrada 09.07.2019 11:25
Ответ принят как подходящий

Я думаю, вы используете тему формы начальной загрузки, проверьте файл конфигурации.

и если это так, вы можете добавить эту строку в верхнюю часть вашего файла ветки:

{% form_theme form 'form_div_layout.html.twig' %}

Да! Проблема заключалась в том, что у него нет формы темы по умолчанию. Я решил с этим, спасибо.

Rafael Estrada 09.07.2019 14:36

Вы можете прочитать его на официальной странице: https://symfony.com/doc/current/reference/forms/types/form.html#attr

Просто добавьте: {'attr': {'имя атрибута': 'value'}}

Как показано ниже

{{ form_widget(form.propertyName, {'attr': {'placeholder': 'name'} }) }}

Другие вопросы по теме