Merge pull request #15405 from vladis84/15226-auto-generate-placeholder

Enh #15226: Auto generate placeholder from fields
This commit is contained in:
Dmitry Naumenko
2017-12-24 15:12:06 +02:00
committed by GitHub
3 changed files with 37 additions and 1 deletions

View File

@ -3,7 +3,7 @@ Yii Framework 2 Change Log
2.0.14 under development
------------------------
- Enh #15226: Auto generate placeholder from fields (vladis84)
- Bug #15356: Fixed multiple bugs in `yii\db\Query::getTablesUsedInFrom()` (vladis84, samdark)
- Bug #14157: Add support for loading default value `CURRENT_TIMESTAMP` of MySQL `datetime` field (rossoneri)
- Bug #15046: Throw an `yii\web\HeadersAlreadySentException` if headers were sent before web response (dmirogin)

View File

@ -1314,6 +1314,8 @@ class BaseHtml
$options['id'] = static::getInputId($model, $attribute);
}
self::setActivePlaceholder($model, $attribute, $options);
return static::input($type, $name, $value, $options);
}
@ -1362,6 +1364,21 @@ class BaseHtml
return static::activeInput('text', $model, $attribute, $options);
}
/**
* Generate placeholder from model label.
* @param Model $model the model object
* @param string $attribute the attribute name or expression. See [[getAttributeName()]] for the format
* about attribute expression.
* @param array $options the tag options in terms of name-value pairs. These will be rendered as
* the attributes of the resulting tag. The values will be HTML-encoded using [[encode()]].
*/
protected static function setActivePlaceholder($model, $attribute, &$options = [])
{
if (isset($options['placeholder']) && $options['placeholder'] === true) {
$options['placeholder'] = $model->getAttributeLabel($attribute);
}
}
/**
* Generates a hidden input tag for the given model attribute.
* This method will generate the "name" and "value" tag attributes automatically for the model attribute
@ -1458,6 +1475,7 @@ class BaseHtml
$options['id'] = static::getInputId($model, $attribute);
}
self::normalizeMaxLength($model, $attribute, $options);
self::setActivePlaceholder($model, $attribute, $options);
return static::textarea($name, $value, $options);
}

View File

@ -1579,6 +1579,24 @@ HTML;
$actual = Html::activeCheckboxList($model, 'types', ['foo']);
$this->assertEqualsWithoutLE($expected, $actual);
}
public function testActiveTextInput_placeholderFillFromModel()
{
$model = new HtmlTestModel();
$html = Html::activeTextInput($model, 'name', ['placeholder' => true]);
$this->assertContains('placeholder="Name"', $html);
}
public function testActiveTextInput_customPlaceholder()
{
$model = new HtmlTestModel();
$html = Html::activeTextInput($model, 'name', ['placeholder' => 'Custom placeholder']);
$this->assertContains('placeholder="Custom placeholder"', $html);
}
}
/**