Yii2 — как использовать атрибуты с тире ( — ) в имени

Я пытаюсь создать поле активной формы с помощью

<?php $form = ActiveForm::begin(); ?>
...
<?= $form->field($competitor, 't-shirt_size' )->textInput(['maxlength' => true]) ?>

что дает мне следующую ошибку

Attribute name must contain word characters only.

Имя поля в базе данных t-shirt_size

1 ответ

  1. Вы видите эту ошибку из-за того, как работает шаблон ActiveRecord.

    Объяснение этому можно найти в руководстве Yii 2.

    Поскольку атрибуты активных записей имеют имена после столбцов таблицы , вы можете найти, что вы пишете PHP-код, Как$customer->first_name, который использует подчеркивания для разделения слов в именах атрибутов, если ваши столбцы таблицы названы таким образом. Если вас беспокоит согласованность стиля кода, следует соответствующим образом переименовать столбцы таблицы (например, использовать camelCase).

    В PHP нельзя создать атрибут объекта с тире в его имени, поэтому имя столбца БД с тире, несмотря на то, что это разрешено в некоторых ядрах БД, не будет доступно в качестве атрибута ActiveRecord.

    Вы должны переименовать поле БД или использовать что-то другое, чем виджет ActiveForm, чтобы создать форму, хотя я не уверен, что вы не нажмете исключение относительно этого атрибута где-то еще.