Поле FileType
Дата оновлення перекладу 2025-01-14
Поле FileType
FileType
представляэ введення файлу вашій формі.
?????????????? ?? | ???? input file |
???????????? ???????????? ?? ????????????? | ???? ?????, ??????? ???????? ????. |
???????????? ??? | FormType |
???? | FileType |
Дата оновлення перекладу 2025-02-21
Tip
Повний список опцій, визначених та успадкованих цим типом форми, доступний шляхом виконання цієї команди у вашому додатку:
1 2
# замініть 'FooType' імʼям класу вашого типу форми
$ php bin/console debug:form FooType
Базове застосування
Припустимо, що у вас є таке визначення форми:
1 2 3 4
use Symfony\Component\Form\Extension\Core\Type\FileType;
// ...
$builder->add('attachment', FileType::class);
Коли відправляється форм, поле attachment
буде екземпляром
UploadedFile. Він може бути
використаний для переміщення файлу attachment
у постійну локацію:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
use Symfony\Component\HttpFoundation\File\UploadedFile;
public function upload(): Response
{
// ...
if ($form->isSubmitted() && $form->isValid()) {
$someNewFilename = ...
$file = $form['attachment']->getData();
$file->move($directory, $someNewFilename);
// ...
}
// ...
}
Метод move()
бере каталог та імʼя файлу в якості своїх аргументів. Ви можете
обчислити імʼя файлу одним з наступних способів:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// використати оригінальне імʼя файлу
$file->move($dir, $file->getClientOriginalName());
// коли було використано завантаження "webkitdirectory"
// інакше значення буде таким самим, як і getClientOriginalName
// $file->move($directory, $file->getClientOriginalPath());
// створити випадкове імʼя та спробувати вгадати розширення (безпечніше)
$extension = $file->guessExtension();
if (!$extension) {
// розширення не може бути вгадано
$extension = 'bin';
}
$file->move($dir, rand(1, 99999).'.'.$extension);
Використання оригінального імені через getClientOriginalName()
небезпечно, так як
воно могло бути змінене кінцевим користувачем. Однак, воно може містити символи, не
дозволені в імʼях файлів. Ви повинні очистити імʼя перед тим як використовувати його
напряму.
Прочитайте Як завантажувати файли, щоб побачити приклад того, як управляти завантаженням файлу, повʼязаного з сутністю Doctrine.
Опції поля
multiple
тип: Boolean
за замовчуванням: false
Коли встановлена як "true", користувач зможе завантажувати декілька файлів водночас.
Перевизначені опції
Дата оновлення перекладу 2025-02-22
compound
тип: boolean
за замовчуванням: false
Ця опція вказує, чи містить тип дочірні типи. Ця опція управляється внутрішньо для вбудованих типів, так що нема необхідності конфігурувати її явно.
data_class
тип: string
за замовчуванням: File
Ця опція встановлює правильний перетворювач даних, повʼязаний з даними, для використання типом.
empty_data
тип: mixed
за замовчуванням: null
Ця опція визначає, яке значення буде повертати поле, коли відправлене значення порожнє.
Перевизначені опції
Дата оновлення перекладу 2025-02-24
invalid_message
тип: string
за замовчуванням: Це значення не є валідним значение не валидно
Це повідомлення помилки валідації, яке використовується, якщо дані, введені у це поле, не мають сенсу (тобто валідація проходить невдало).
Це може трапитися, наприклад, якщо користувач вводить у поле
TimeType асбурдний рядок, який
не може бути конвертований в даний час, або якщо користувач вводить
рядок (наприклад, apple
) у числове поле.
Нормальна (програмний код) валідація (наприклад, встановлення мінімальної довжини для поля), має бути встановлена з використанням повідомлень валідації з вашими правилами валідації (довідник ).
Успадковані опції
Ці опції наслідуються з FormType:
Дата оновлення перекладу 2025-02-21
attr
тип: array
за замовчуванням: []
Якщо ви хочете додати додаткові атрибути до HTML представлення поля, то
ви можете використовувати опцію attr
. Це асоціативний масив із HTML-атрибутами
в якості ключів. Це може бути корисно, коли вам потрібно встановити для деякого
віджета користувацький клас:
1 2 3
$builder->add('body', TextareaType::class, [
'attr' => ['class' => 'tinymce'],
]);
See also
Використовуйте опцію row_attr
, якщо ви хочете додати ці атрибути до
елементу рядку типу форми .
Дата обновления перевода 2025-02-24
disabled
тип: boolean
по умолчанию: false
Если вы не хотите, чтобы пользователь изменял значение поля, то вы можете установить опцию отключения, как "true". Любые отправленные данные будут проигнорированы.
Дата оновлення перекладу 2025-02-24
error_bubbling
тип: boolean
за замовчуванням: false
, якщо тільки форма не compound
Дата оновлення перекладу 2022-12-21
Якщо true
, будь-які помилки цього поля будуть передані батьківському полю
або формі. Наприклад, якщо встановлено true
у нормальному полі, будь-які
помилки цього поля будуть прикріплені до головної форми, а не до конкретного
поля.
Дата оновлення перекладу 2024-05-30
error_mapping
тип: array
за замовчуванням: []
Ця опція дозволяє вам змінювати ціль помилки валідації.
Уявіть, що у вас є користувацький метод з назвою matchingCityAndZipCode()
,
який валідує чи співпадають місто та поштовий індекс. На жаль, у вашій формі
немає поля matchingCityAndZipCode
, тому все, що може зробити Symfony, це
відобразити помилку у верхній частині форми.
За допомогою кастомізованого мапування помилок ви можете зробити краще: співставити помилку з полем міста так, щоб воно відображалося над ним:
1 2 3 4 5 6 7 8
public function configureOptions(OptionsResolver $resolver): void
{
$resolver->setDefaults([
'error_mapping' => [
'matchingCityAndZipCode' => 'city',
],
]);
}
Ось правила для лівої та правої частини мапування:
- Ліва частина містить шляхи властивостей;
- Якщо порушення генерується у властивості або методі класу, то його
шлях - це
propertyName
; - Якщо порушення згенеровано в елементі об'єкту
array
абоArrayAccess
, то шлях до нього -[indexName]
; - Ви можете створювати вкладені шляхи властивостей шляхом їх конкатенації, розділяючи
властивості крапками. Наприклад:
addresses[work].matchingCityAndZipCode
; - Права частина містить назви полів форми.
За замовчуванням, помилки для будь-якої властивості, яка не мапована, будуть
спливати в батьківську форму. Ви можете використовувати крапку (.
) зліва,
щоб співставити помилки всіх неспівставлених властивостей до певного поля.
Наприклад, щоб мапувати всі ці помилки до поля city
, використовуйте:
1 2 3 4 5
$resolver->setDefaults([
'error_mapping' => [
'.' => 'city',
],
]);
Дата оновлення перекладу 2024-05-30
help
тип: string
або TranslatableInterface
за замовчуванням: null
Дозволяє вам визначити повідомлення допомоги для поля форми, яке за замовчуванням відображається під полем:
1 2 3 4 5 6 7 8 9 10 11 12 13
use Symfony\Component\Translation\TranslatableMessage;
$builder
->add('zipCode', null, [
'help' => 'The ZIP/Postal code for your credit card\'s billing address.',
])
// ...
->add('status', null, [
'help' => new TranslatableMessage('order.status', ['%order_id%' => $order->getId()], 'store'),
])
;
Дата оновлення перекладу 2025-02-24
help_attr
тип: array
за замовчуванням: []
Встановлює HTML-атрибути для елемента, що використовується для відображення повідомлення допомоги
у полі форми. Його значенням є асоціативним масивом з іменами HTML-атрибутів в якості ключів.
Ці атрибути також можуть бути встановлені в шаблоні:
1 2 3
{{ form_help(form.name, 'Your name', {
'help_attr': {'class': 'CUSTOM_LABEL_CLASS'}
}) }}
Дата оновлення перекладу 2025-02-24
help_html
тип: boolean
за замовчуванням: false
За замовчуванням, зміст опції help
екранується перед відображенням
у шаблоні. Встановіть для цієї опції значення true
, щоб не екранувати його, що може бути
корисно, якщо довідка містить HTML-елементи.
Дата оновлення перекладу 2022-12-21
label
тип: string
або TranslatableMessage
за замовчуванням: Ярлик "вгадується" з імені поля
Встановлює ярлик, який буде використано при відображенні поля. Установка false
прридушить ярлик:
1 2 3 4 5 6 7 8
use Symfony\Component\Translation\TranslatableMessage;
$builder
->add('zipCode', null, [
'label' => 'The ZIP/Postal code',
// опціонально, ви можете використати обʼєкти TranslatableMessage в якості змісту ярлика
'label' => new TranslatableMessage('address.zipCode', ['%country%' => $country], 'address'),
])
Ярлик також може бути встановлений у шаблоні:
1
{{ form_label(form.name, 'Your name') }}
Дата оновлення перекладу 2025-02-24
label_attr
тип: array
за замовчуванням: []
Встановлює HTML-атрибути для елемента <label>
, який буде використаний
при відображенні ярлика для поля. Це асоціативний масив із HTML-атрибутом в
якості ключа. Цей атрибут може також бути встановлений прямо всередині шаблону:
1 2 3
{{ form_label(form.name, 'Your name', {
'label_attr': {'class': 'CUSTOM_LABEL_CLASS'}
}) }}
Дата оновлення перекладу 2025-02-24
label_html
тип: boolean
за замовчуванням: false
За замовчуванням, зміст опції label
екранується перед відображенням
у шаблоні. Встановіть для цієї опції значення true
, щоб не екранувати
її, що може бути корисно, коли ярлик містить HTML-елементи.
Дата оновлення перекладу 2025-02-24
label_format
тип: string
за замовчуванням: null
Конфігурує рядок, що використовується як ярилк поля, у разі, якщо
опція label
не була встановлена. Це корисно під час використання
повідомлень перекладів ключових слів .
Якщо ви використовуєте повідомлення перекладів ключових слів як ярлики, то у
вас часто буде кілька повідомлень із ключовим словом для одного й того самого ярлика
(наприклад, profile_address_street
, invoice_address_street
). Це тому,
що ярлик будується для кожного "шляху" до поля. Щоб уникнути повтору повідомлень
ключових слів, ви можете конфігурувати формат ярлика як статичне
значення, наприклад:
1 2 3 4 5 6 7 8
// ...
$profileFormBuilder->add('address', AddressType::class, [
'label_format' => 'form.address.%name%',
]);
$invoiceFormBuilder->add('invoice', AddressType::class, [
'label_format' => 'form.address.%name%',
]);
Ця опція успадковується дочірніми типами. З використанням вищенаписаного коду,
ярлик поля street
обох форм буде використовувати повідомлення з ключовим словом
form.address.street
.
У форматі ярлика доступні дві змінні:
%id%
-
Унікальний ідентифікатор для поля, що складається з повного шляху до поля та імені
поля (наприклад,
profile_address_street
); %name%
-
Ім'я поля (наприклад,
street
).
Значення за замовчуванням (null
) призводить до
`«людської» версії імені поля.
Note
Опція label_format
оцінюється в темі форми. Переконайтеся в тому, що ви
оновили ваші щаблони, у разі, якщо ви налаштовували темізацію форм.
Дата оновлення перекладу 2025-02-24
mapped
тип: boolean
за замовчуванням: true
Якщо ви хочете, щоб поле було проігноровано при читанні або записі в нього
обʼєкта, ви можете встановити опцію mapped
як false
.
Дата оновлення перекладу 2023-09-25
required
тип: boolean
за замовчуванням: true
Якщо значення true, буде відображено обов'язковий атрибут HTML5. Відповідний
label
також буде відображено з класом required
.
Це поверхнево і не залежить від валідації. У кращому випадку, якщо ви дозволите Symfony вгадати тип вашого поля, то значення цієї опції буде вгадано з вашої інформації валідації.
Note
Обов'язкова опція також впливає на те, як будуть оброблятися порожні дані для кожного поля. Для більш детальної інформації дивіться опцію empty_data.
Дата оновлення перекладу 2025-02-24
row_attr
тип: array
за замовчуванням: []
Асоціативний масив атрибутів HTML, що додаються до елементу, який використовується для відображення рядка типу форми :
1 2 3
$builder->add('body', TextareaType::class, [
'row_attr' => ['class' => 'text-editor', 'id' => '...'],
]);
See also
Використовуйте опцію attr
, якщо ви хочете додати ці атрибути до
елементу віджета типу форми .
Змінні форми
?????? | ??? | ??????????? |
---|---|---|
type |
string |
??? ??????? ??????????? ?? file , ??? ?????????? ? ??????? ???? ???????? ?????. |