У меня есть контактная форма, и я пытаюсь ввести класс для ввода моей формы.
Это в 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 перезаписывает мой класс? Как я могу это исправить?
В вашем конструкторе должно быть нечто большее, чем та строка, которую вы нам дали, управление формой не возникает из ниоткуда, как насчет добавления класса в конструктор?
@DylanKas Я пытался добавить класс в конструктор, и это то же самое.
Я предполагаю, что класс «form-control» исходит из вашей глобальной темы формы (которая может быть чем-то, что вы написали сами, или просто используете какой-то предопределенный, например, bootstrap, который делает такие дополнения). Таким образом, тема формы будет тем местом, где это можно исправить (либо исправить свою собственную, либо расширить и исправить предопределенную).




Попробуйте это, если это поможет вам
{{ form_start(form) }}
{{ form_widget(form.name, {'attr': {'class': 'input-text input-text--white', 'placeholder': 'name'} }) }}
{{ form_end(form) }}То же самое с кавычками или без них. Обратите внимание, что он получает заполнитель.
Я считаю, что вы не можете определить два атрибута на 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',
]);
Вы можете прочитать больше об атрибутах поля формы здесь.
Спасибо за ответ. Пробовал и этот вариант, но результат тот же.
Вы удалили «attr» из form_widget, когда попробовали мои предложения?
Да, я сделал. Я тоже сначала думал, что проблема в нем.
Я думаю, вы используете тему формы начальной загрузки, проверьте файл конфигурации.
и если это так, вы можете добавить эту строку в верхнюю часть вашего файла ветки:
{% form_theme form 'form_div_layout.html.twig' %}
Да! Проблема заключалась в том, что у него нет формы темы по умолчанию. Я решил с этим, спасибо.
Вы можете прочитать его на официальной странице: https://symfony.com/doc/current/reference/forms/types/form.html#attr
Просто добавьте: {'attr': {'имя атрибута': 'value'}}
Как показано ниже
{{ form_widget(form.propertyName, {'attr': {'placeholder': 'name'} }) }}
Возможный дубликат Как установить атрибут класса для ввода формы Symfony2