Поле CountryType

Поле CountryType

CountryType - это подмножество ChoiceType, которое отображает страны мира. В качестве дополнительного бонуса, названия стран отображаются на языке пользователя.

"Значение" каждой страны - это двубуквенный код страны.

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
????? CountryType

Переопределённые опции

choices

по умолчанию: Symfony\Component\Intl\Intl::getRegionBundle()->getCountryNames()

По умолчанию, опция choices типа стран - это полный список стран. Локаль используется для перевода названий стран.

Caution

Если вы хотите переопределить встроенные варианты типа страны, вам также придётся установить опцию choice_loader, как null.

Наследуемые опции

Эти опции наследуются из ChoiceType:

error_bubbling

тип: boolean по умолчанию: false, кроме случаев, когда форма compound

Дата оновлення перекладу 2022-12-21

Якщо 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

Дата оновлення перекладу 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'),
    ])

Ярлик також може бути встановлений у шаблоні:

  • 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.