Yii2. Метки полей формы

08.03.2019

Теги: PHPWeb-разработкаYii2ТеорияФормаФреймворк

По умолчанию, метки полей формы автоматически генерируются из названия поля. Генерация выполняется методом generateAttributeLabel() класса yii\base\Model. Он преобразует первую букву каждого слова в верхний регистр, если имена переменных состоят из нескольких слов. Например, username станет Username, а firstName станет First Name.

Если такой вариант не устраивает, нужно переопределить метод yii\base\Model::attributeLabels():

namespace app\models;
use yii\base\Model;

class FeedbackForm extends Model
{
    public $name;
    public $email;
    public $body;

    public function attributeLabels() {
        return [
            'name' => 'Ваше имя',
            'email' => 'Адрес почты',
            'body' => 'Ваше сообщение',
        ];
    }
}

Теперь при создании формы в шаблоне, метки задавать не нужно:

<h1><?= Html::encode($this->title) ?></h1>

<?php $form = ActiveForm::begin(['id' => 'feedback-form']); ?>
    <?= $form->field($model, 'name')->textInput()->label('Ваше имя'); ?>
    <?= $form->field($model, 'email')->input('email')->label('Адрес почты'); ?>
    <?= $form->field($model, 'body')->textarea(['rows' => 5])->label('Ваше сообщение'); ?>
    <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']); ?>
<?php ActiveForm::end(); ?>
<h1><?= Html::encode($this->title) ?></h1>

<?php $form = ActiveForm::begin(['id' => 'feedback-form']); ?>
    <?= $form->field($model, 'name')->textInput(); ?>
    <?= $form->field($model, 'email')->input('email'); ?>
    <?= $form->field($model, 'body')->textarea(['rows' => 5]); ?>
    <?= Html::submitButton('Отправить', ['class' => 'btn btn-primary']); ?>
<?php ActiveForm::end(); ?>

Интернационализация

namespace app\models;
use yii\base\Model;

class FeedbackForm extends Model
{
    public $name;
    public $email;
    public $body;

    public function attributeLabels() {
        return [
            'name' => \Yii::t('app', 'Your name'),
            'email' => \Yii::t('app', 'Your email'),
            'body' => \Yii::t('app', 'Your message'),
        ];
    }
}
<?php
/*
 * Файл config/web.php
 */
$config = [
    'id' => 'basic',
    'basePath' => dirname(__DIR__),
    // язык перевода — русский
    'language' => 'ru-RU',
    'components' => [
        /* ... */
        'i18n' => [
            'translations' => [
                'app*' => [
                    'class' => 'yii\i18n\PhpMessageSource',
                    // все переводы будут в файле messages/ru_RU/app.php
                    'fileMap' => [
                        'app' => 'app.php',
                    ],
                ],
            ],
        ],
    ],
    /* ... */
];
<?php
/*
 * Файл messages/ru_RU/app.php
 */
return [
    'Your name'    => 'Ваше имя',
    'Your email'   => 'Ваш адрес почты',
    'Your message' => 'Ваше сообщение',
    'Submit'       => 'Отправить',
];
<h1><?= Html::encode($this->title) ?></h1>

<?php $form = ActiveForm::begin(['id' => 'feedback-form']); ?>
    <?= $form->field($model, 'name')->textInput(); ?>
    <?= $form->field($model, 'email')->input('email'); ?>
    <?= $form->field($model, 'body')->textarea(['rows' => 5]); ?>
    <?= Html::submitButton(\Yii::t('app', 'Submit'), ['class' => 'btn btn-primary']);?>
<?php ActiveForm::end(); ?>

Поиск: PHP • Web-разработка • Yii2 • Форма • Фреймворк • Интернационализация • ru-RU • Label • Метка

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.