Поле LocaleType
Поле LocaleType
LocaleType
- это подмножество ChoiceType
, которое позволяет ползователю
выбирать из большого списка локалей (язык+страна). В качестве дополнительного бонуса,
имена локалей отображаются на языке пользователя.
"Значение" каждой локали - это либо двухбуквенный код языка ISO 639-1 (например,
fr
), либо код языка, после которого идёт нижнее подчёркивание и код страны
ISO 3166-1 alpha-2 (например, fr_FR
для франузского/Франции).
Note
Локаль вашего пользователя угадывается с использованием Locale::getDefault()
В отличие от ChoiceType
, вам не нужно указывать опцию choices
, так как тип
поля автоматически использует большой список локалей. Вы можете указать эти опции
вручную, но тогда вы должны использовать только ChoiceType
напрямую.
???????????? ??? | ????? ???? ??????? ?????? (??. ) |
???????????????? ????? | |
??????????? ????? | ?? ChoiceType - error_bubbling - error_mapping - expanded - multiple - placeholder - preferred_choices ?? FormType - data - disabled - empty_data - label - label_attr - label_format - mapped - required |
???????????? ??? | ChoiceType |
????? | LocaleType |
Переопределённые опции
choices
по умолчанию: Symfony\Component\Intl\Intl::getLocaleBundle()->getLocaleNames()
Опция выборов по умолчанию - все локали. Она использует локаль по умолчанию, чтобы указать язык.
Caution
Если вы хотите переопределить встроенные варианты типов локали, вы также должны
установить опцию choice_loader
, как null
.
Наследуемые опции
Эти опции наследуются из ChoiceType:
error_bubbling
тип: boolean
по умолчанию: false
, кроме случаев, когда форма compound
Если true
, то любые ошибки в этом поле будут переданы родительскому
полю или форме. Например, если установлена, как true
в нормальном
поле, то любые ошибки для этого поля будут присоединены к главной форме,
а не к конкретному полю.
error_mapping
тип: array
по умолчанию: array()
Эта опция позволяет вам изменять цель ошибки валидации.
Представьте, что у вас есть пользовательский метод под именем matchingCityAndZipCode()
,
который валидирует, совпадает ли город и почтовый индекс. К сожалению, поля
"matchingCityAndZipCode" в вашей форме нет, поэтому всё, что Symfony может сделать -
это отобразить ошибку наверху формы.
С настроенным отображением ошибок вы можете сделать лучше: привяжите ошибку к полю города, чтобы она отображалась над ним:
1 2 3 4 5 6 7 8
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'error_mapping' => array(
'matchingCityAndZipCode' => 'city',
),
));
}
Вот правила для лево- и правостороннего отображения:
- Левая сторона содержит пути свойств;
- Если наружение генерируется в свойств или методе класс, то его путь - это
просто
propertyName
; - Вы можете создать вложенные пути свойств, соединив их, разделяя свойства точками.
Например:
addresses[work].matchingCityAndZipCode
; - Правая сторона содержит просто имена полей в форме.
По умолчанию, ошибки любого свойства, которое не отображенно, соберутся в
родительской форме. Вы можете использовать точку (.
) в левой части, чтобы
привязать ошибки всех неотображённых свойств к конкретному полю. Например,
чтобы привязать эти ошибки к полю city
, используйте:
1 2 3 4 5
$resolver->setDefaults(array(
'error_mapping' => array(
'.' => 'city',
),
));
expanded
type: boolean
default: false
If set to true, radio buttons or checkboxes will be rendered (depending
on the multiple
value). If false, a select element will be rendered.
multiple
тип: boolean
по умолчанию: false
Если "true", то пользователь сможет выбирать несколько опций (а не только
одну). В зависимости от значения опции expanded
, это будет отображаться
либо как тег выбора, либо как чекбоксы если "true" и тег выбора, либо селективные
кнопки, если "false". Возвращённое значение будет массивом.
placeholder
тип: string
или boolean
Эта опция определяет, появится ли специальная опция "empty" (например,
"Выберите опцию" сверху виджета выбора. Эта опция применяется только
если опция multiple
установлена, как "false".
Добавить пустое значение с текстом "Выберите опцию" в качестве текста:
1 2 3 4 5 6
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; // ... $builder->add('states', ChoiceType::class, array( 'placeholder' => 'Choose an option', ));
Гарантировать, что не отображается ни одна "пустая" опция значения:
1 2 3 4 5 6
use Symfony\Component\Form\Extension\Core\Type\ChoiceType; // ... $builder->add('states', ChoiceType::class, array( 'placeholder' => false, ));
Если вы оставите опцию placeholder
неустановленной, то пустая (без текста)
опция, будет автоматически добавлена только, если опция required
установлена,
как "false":
1 2 3 4 5 6 7
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
// ...
// будет добавлена пустая (без текста) опция
$builder->add('states', ChoiceType::class, array(
'required' => false,
));
preferred_choices
type: array
, callable
, string
or PropertyPath default: []
This option allows you to display certain choices at the top of your list with a visual separator between them and the complete list of options. If you have a form of languages, you can list the most popular on top, like Bork and Pirate:
1 2 3 4 5 6 7 8 9 10 11 12
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
// ...
$builder->add('language', ChoiceType::class, [
'choices' => [
'English' => 'en',
'Spanish' => 'es',
'Bork' => 'muppets',
'Pirate' => 'arr',
],
'preferred_choices' => ['muppets', 'arr'],
]);
This options can also be a callback function to give you more flexibility. This might be especially useful if your values are objects:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
use Symfony\Component\Form\Extension\Core\Type\ChoiceType;
// ...
$builder->add('publishAt', ChoiceType::class, [
'choices' => [
'now' => new \DateTime('now'),
'tomorrow' => new \DateTime('+1 day'),
'1 week' => new \DateTime('+1 week'),
'1 month' => new \DateTime('+1 month'),
],
'preferred_choices' => function ($choice, $key, $value) {
// prefer options within 3 days
return $choice <= new \DateTime('+3 days');
},
]);
This will "prefer" the "now" and "tomorrow" choices only:

Finally, if your values are objects, you can also specify a property path string on the object that will return true or false.
The preferred choices are only meaningful when rendering a select
element
(i.e. expanded
false). The preferred choices and normal choices are separated
visually by a set of dotted lines (i.e. -------------------
). This can be customized
when rendering the field:
- Twig
- PHP
1
{{ form_widget(form.publishAt, { 'separator': '=====' }) }}
Tip
When defining a custom type, you should use the ChoiceList class helper:
1 2 3 4 5 6
use Symfony\Component\Form\ChoiceList\ChoiceList;
// ...
$builder->add('choices', ChoiceType::class, [
'preferred_choices' => ChoiceList::preferred($this, 'taggedAsFavorite'),
]);
See the "choice_loader" option documentation .
Эти опции наследуются из FormType:
data
тип: mixed
по умолчанию : По умолчанию является полем основоположной структуры.
Когда вы создаёте форму, каждое поле изначально отображает значение соотствующего свойства данных домена формы (например, если вы привязываете объект к форме). Если вы хотите переопределить эти изначальные значения для формы или индивидуального поля, вы можете установить это в опции данных:
1 2 3 4 5 6
use Symfony\Component\Form\Extension\Core\Type\HiddenType;
// ...
$builder->add('token', HiddenType::class, array(
'data' => 'abcdef',
));
Caution
Опция data
всегда переопределяет значение, взятое из данных домена (объекта)
при отображении. Это означает, что значение объекта также переопределяется, когда
форма редактирует уже существующий сохранённый объект, что приводит к потере
сохранённого значения при отправке формы.
disabled
тип: boolean
по умолчанию: false
Если вы не хотите, чтобы пользователь изменял значение поля, то вы можете установить опцию отключения, как "true". Любые отправленные данные будут проигнорированы.
empty_data
тип: mixed
- .. Этот файл должен быть включен только с "началом после" или "окончанием до",
- установленными в значении заполнителя. Его цель - позволить нам включать только часть этого файла.
DEFAULT_PLACEHOLDER
Эта опция определяет, какое значение вернёт поле, если отправленное значение пустое (или отсутствует). Она не устаналивает изначальное значение, если оно не предоставлено, когда форма отображается для просмотра.
Это означает, что вам помогают обрабатывать отправку формы с пустыми полями.
Например, если вы хотите, чтобы поле name
было ясно установлено, как
John Doe
, когда значение не выбрано, вы можете сделать это так:
1 2 3 4
$builder->add('name', null, array(
'required' => false,
'empty_data' => 'John Doe',
));
Это всё ещё будет отображать пустое текстовое поле, но при отправке будет
установлено значение John Doe
. Используйте опции data
или placeholder
,
чтобы показать это изначальное значение в отображённой форме.
Если форма составная, то вы можете установить empty_data
в качестве массива,
объекта или замыкания. См. статью Как сконфигурировать пустые данные для класса формы , чтобы узнать больше
об этих опциях.
Note
Если вы хотите установить опцию empty_data
для всего вашего класса
форм, см. статью Как сконфигурировать пустые данные для класса формы.
Caution
Преобразователи данных формы всё ещё будут
применяться к значению empty_data
. Это означает, что пустая строка будет
преобразована в null
. Используйте пользовательский преобразователь данных,
если вы хотите ясно вернуть пустую строку.
:end-before: DEFAULT_PLACEHOLDER
Настоящее значение по умолчанию этой опции зависит от других опцию поля:
- Если
multiple
-false
, аexpanded
-false
, то -''
(пустая строка); - Иначе -
array()
(пустой массив).
empty_data
тип: mixed
- .. Этот файл должен быть включен только с "началом после" или "окончанием до",
- установленными в значении заполнителя. Его цель - позволить нам включать только часть этого файла.
DEFAULT_PLACEHOLDER
Эта опция определяет, какое значение вернёт поле, если отправленное значение пустое (или отсутствует). Она не устаналивает изначальное значение, если оно не предоставлено, когда форма отображается для просмотра.
Это означает, что вам помогают обрабатывать отправку формы с пустыми полями.
Например, если вы хотите, чтобы поле name
было ясно установлено, как
John Doe
, когда значение не выбрано, вы можете сделать это так:
1 2 3 4
$builder->add('name', null, array(
'required' => false,
'empty_data' => 'John Doe',
));
Это всё ещё будет отображать пустое текстовое поле, но при отправке будет
установлено значение John Doe
. Используйте опции data
или placeholder
,
чтобы показать это изначальное значение в отображённой форме.
Если форма составная, то вы можете установить empty_data
в качестве массива,
объекта или замыкания. См. статью Как сконфигурировать пустые данные для класса формы , чтобы узнать больше
об этих опциях.
Note
Если вы хотите установить опцию empty_data
для всего вашего класса
форм, см. статью Как сконфигурировать пустые данные для класса формы.
Caution
Преобразователи данных формы всё ещё будут
применяться к значению empty_data
. Это означает, что пустая строка будет
преобразована в null
. Используйте пользовательский преобразователь данных,
если вы хотите ясно вернуть пустую строку.
:start-after: DEFAULT_PLACEHOLDER
Дата обновления перевода 2023-01-12
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'),
])
Ярлык также может быть установлен внутри шаблона:
- Twig
- PHP
1
{{ form_label(form.name, 'Your name') }}
label_attr
тип: array
по умолчанию: array()
Устанавливает HTML-атрибуты для элемента <label>
, который будет использован
при отображении ярлыка для поля. Это ассоциативный массив с HTML-атрибутом в
качестве ключа. Этот атрибут может также быть установлен прямо внутри шаблона:
- Twig
- PHP
1 2 3
{{ form_label(form.name, 'Your name', {
'label_attr': {'class': 'CUSTOM_LABEL_CLASS'}
}) }}
label_format
тип: string
по умолчанию: null
Конфигурирует строку, используемую в качестве ярылка поля, в случае, если
опция label
не была установлена. Это полезно при использовании
сообщений переводов ключевых слов.
Если вы используете сообщения переводов ключевых слов в качестве ярлыков, то у
вас часто будет несколько сообщений с ключевым словом для одного и того же ярлыка
(например, profile_address_street
, invoice_address_street
). Это потому,
что ярлык строится для каждого "пути" к полю. Чтобы избежать повтора сообщений
ключевых слов, вы можете сконфигурировать формат ярлыка в качестве статичного
значения, например:
1 2 3 4 5 6 7 8
// ...
$profileFormBuilder->add('address', AddressType::class, array(
'label_format' => 'form.address.%name%',
));
$invoiceFormBuilder->add('invoice', AddressType::class, array(
'label_format' => 'form.address.%name%',
));
Эта опция наследуется дочерними типами. С использованием вышенаписанного кода,
ярлык поля street
обеих форм будет использовать сообщение с ключевым словом
form.address.street
.
В формате ярлыка доступны две переменные:
%id%
-
Уникальный идентификатор для поля, состоящий из полного пути к полю и имени
поля (например,
profile_address_street
); %name%
-
Имя поля (например,
street
).
Значение по умолчанию (null
) приводит к
"человеческой" версии имени поля.
Note
Опция label_format
оценивается в теме формы. Убедитесь в том, что вы
обновили ваши щаблоны, в случае, если вы настраивали темизацию форм.
mapped
тип: boolean
по умолчанию: true
Если вы хотите, чтобы поле было проигнорировано про чтении или записи в него
объетка, вы можете установить опцию mapped
, как false
.
required
тип: boolean
по умолчанию: true
Если "true", то будет отображён обязательный атрибут HTML5.
Соответствующий label
также отобразится с классом required
.
Эта опция внешняя и не зависит от валидации. В лучшем случае, если вы позволите Symfony отгадать ваш тип поля, тогда значение этой опции будет угадано из вашей информации о валидации.
Note
Обязательная опция также влияет на то, как будут обработаны пустые данные для каждого поля. Чтобы узнать больше, см. опцию empty_data.