Placeholders в Model

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Auramel
Сообщения: 33
Зарегистрирован: 2017.11.17, 14:39
Откуда: Russia, Ufa
Контактная информация:

Placeholders в Model

Сообщение Auramel » 2018.02.12, 11:50

Доброго времени суток, в своих проектах использую нативные формы (без ActiveForm) и очень часто необходимо добавлять placeholder. Раз уж есть метод attributeLabels, добавил и attributePlaceholders(). Предлагаю добавить это в класс \yii\base\Model.
Пример:

Код: Выделить всё

/**
     * @param string $attribute
     * @return string
     */
    public function getAttributePlaceholder(string $attribute)
    {
        $placeholders = $this->attributePlaceholders();

	return ($placeholders[$attribute]) ?? $this->getAttributeLabel($attribute);
    }

Код: Выделить всё

/**
     * @return array
     */
    public function attributePlaceholders(): array 
    {
        return [
            'title'     => 'Введите заголовок',
            'shortText' => 'Краткий текст',
            'text'      => 'Полное содержание'
        ];
    }
Было бы очень удобно :)

Аватара пользователя
samdark
Администратор
Сообщения: 8694
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Placeholders в Model

Сообщение samdark » 2018.02.12, 12:08

И как это потом использовать?

Auramel
Сообщения: 33
Зарегистрирован: 2017.11.17, 14:39
Откуда: Russia, Ufa
Контактная информация:

Re: Placeholders в Model

Сообщение Auramel » 2018.02.12, 13:34

Код: Выделить всё

<form id="add-article" class="form" action="<?= Url::to(['add']) ?>" method="POST">
    <div class="form__block">
        <label class="form__label" for="title"><?= $model->getAttributeLabel('title')?></label>
        <input id="title"
               class="form__field"
               name="title"
               value="<?= $model->title?>"
               placeholder="<?= $model->getAttributePlaceholder('title') ?>"
        >
    </div>
    <div class="form__block">
        <label class="form__label" for="shortText"><?= $model->getAttributeLabel('shortText')?></label>
        <textarea id="shortText"
                  class="form__field"
                  name="shortText"
                  placeholder="<?= $model->getAttributePlaceholder('shortText') ?>"
                  rows="10"
        ><?= $model->shortText ?></textarea>
    </div>
    <div class="form__block">
        <label class="form__label" for="text"><?= $model->getAttributeLabel('text')?></label>
        <textarea id="text"
                  class="form__field"
                  name="text"
                  placeholder="<?= $model->getAttributePlaceholder('text') ?>"
                  rows="20"
        ><?= $model->text ?></textarea>
    </div>
    <div class="form__block align-text-xs-center">
        <button class="form__button" type="submit"><?= $buttonText ?></button>
    </div>
    <input type="hidden" name="<?= Yii::$app->getRequest()->csrfParam?>" value="<?= Yii::$app->getRequest()->getCsrfToken() ?>">
</form>
вот пример из одной формы. Если же сильно заморочиться, можно и ActiveForm немного переписать, чтобы он автоматически placeholder делал, подобно attributeLabel'у :) ;)

Аватара пользователя
samdark
Администратор
Сообщения: 8694
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Placeholders в Model

Сообщение samdark » 2018.02.12, 16:23

В AF уже: https://github.com/yiisoft/yii2/pull/15405, скоро релизнем. В модель тащить — вопрос большой.

Auramel
Сообщения: 33
Зарегистрирован: 2017.11.17, 14:39
Откуда: Russia, Ufa
Контактная информация:

Re: Placeholders в Model

Сообщение Auramel » 2018.02.12, 16:40

понятно. Спасибо за ответ :)

Ответить