Форма Symfony только для чтения
Как отображать поля, read-only
помощью компонента формы Symfony?
Вот как я пытаюсь сделать это безрезультатно:
Symfony 2
$builder
->add('descripcion', 'text', array(
'read_only' =>'true'
));
}
Symfony 3
$builder
->add('descripcion', TextType::class, array(
'read_only' => 'true'
));
}
Ответы
Ответ 1
Предоставленные ответы заканчиваются этим исключением на Symfony 3:
Неотображается PHP Exception Symfony\Component\OptionsResolver\Exception\UndefinedOptionsException: "Опция" read_only "не существует.
Правильный способ сделать это - использовать свойство attr
в поле:
->add('descripcion', TextareaType::class, array(
'attr' => array(
'readonly' => true,
),
));
Ответ 2
Вы указали свой атрибут только для чтения в строку, он должен быть логическим.
удалите кавычки вокруг true
вот так:
->add('descripcion','text',array('read_only' => true))
true, без кавычек.
Ответ 3
Я считаю, что единственный безопасный способ представить поле формы как доступное только для чтения, а также помешать вашей форме принять новое значение в запросе, заключается в следующем.
$builder->add(
'description',
TextType::class,
['disabled' => true]
);
Другое предложение использовать ['attr' => ['readonly' => true]]
или ['attr' => ['disabled' => true]]
сделает вас уязвимыми для поддельных запросов.
Оба последних параметра будут устанавливать атрибуты "только для readonly
или " disabled
в поле, но ваша форма будет по-прежнему принимать новое значение для этого поля, если оно включено в запрос.
Только первый вариант выше отключит поле формы, а также не позволит вашей Форме принять новое значение для поля в запросе.
Я проверил это с помощью Symfony Form 3.4. Я не знаю, если 4 ведет себя так же.
Ответ 4
read_only устарел с Symfony 2.8. Поэтому вместо этого используйте readonly. И предоставить логическое значение для этого атрибута
->add('','text',array('readonly' => true))
Ответ 5
Обновление. Начиная с Symfony 3.0, значение readonly должно быть установлено в параметре attr.
http://symfony.com/doc/2.8/reference/forms/types/form.html#read-only
Вместо этого также можно использовать отключенную опцию.
Ответ 6
Symfony 4 позволяет использовать только "отключенную" опцию в поле формы. Но это что-то другое, что "только для чтения".
- Отключено - пользователь не может редактировать поле, и его значение НЕ передается во время передачи формы.
- Только для чтения - пользователь не может редактировать поле, но его значение передается во время передачи формы.
Единственное решение, которое я нашел для "только для чтения":
->add('fieldname', TextType::class, [
'label' => false,
'attr'=> [ 'readonly' => true ]
])
Ответ 7
Рекомендую использовать отключенную опцию, потому что любое отправленное значение будет игнорироваться в соответствии с документами: https://symfony.com/doc/current/reference/forms/types/text.html#disabled
$builder->add('descripcion', TextType::class, [
'disabled' => 'true',
]);
Ответ 8
Если familia and proofedor - отношения к другому объекту, я думаю, что они не должны быть текстовыми. Попробуйте аннулировать их типы или изменить тип сущности и проверить, не сработало ли оно.
Ответ 9
Позвольте мне добавить что-то, с чем другие ответы не помогли. Обработка как поле, но "настройка" для отключения издания может работать во многих случаях. Тем не менее, по крайней мере, трудно сделать в некоторых форматах, которые полностью предотвращают выпуск (т.е. Рендер как метку).
Как это решить? То, что я сделал, - это определить поле как HiddenType, а в шаблоне - рендеринг с использованием {{ form.vars.value.myfield }}
или {{ item.myfield }}
, взяв "item" как объект объекта, заключенный во все, что вы можете думать, как любой другой элемент HTML.
Ответ 10
readonly
для read_only
readonly
и не read_only
. Вы должны сделать эту опцию в attr
следующим образом:
->add('', TextType::class, array('attr'=> array('readonly' => true)))
Ответ 11
Другое решение может быть:
->add('value', TextType::class, ['disabled' => true]):
Взято с: http://symfony.com/doc/current/reference/forms/types/text.html#disabled
Ответ 12
Только опция "отключен" не вызывает ошибку
$builder
->add('descripcion', TextType::class, array(
'disabled' => 'true'
));
}
Ответ 13
Для отключенного поля типа объекта работает нормально
->add('organizacion', EntityType::class, array(
'class' => 'AppBundle:Organizacion',
'label' => 'Institución/Organización',
'choice_label' => 'nombre',
'disabled' => true
))