Skip to content

Commit

Permalink
Enh yiisoft#15226: Auto generate placeholder from fields
Browse files Browse the repository at this point in the history
  • Loading branch information
vladis84 committed Dec 24, 2017
1 parent 072ef77 commit 78d76c3
Show file tree
Hide file tree
Showing 3 changed files with 36 additions and 1 deletion.
2 changes: 1 addition & 1 deletion framework/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
17 changes: 17 additions & 0 deletions framework/helpers/BaseHtml.php
Original file line number Diff line number Diff line change
Expand Up @@ -1359,9 +1359,25 @@ private static function normalizeMaxLength($model, $attribute, &$options)
public static function activeTextInput($model, $attribute, $options = [])
{
self::normalizeMaxLength($model, $attribute, $options);
self::activePlaceholder($model, $attribute, $options);
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 activePlaceholder($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
Expand Down Expand Up @@ -1458,6 +1474,7 @@ public static function activeTextarea($model, $attribute, $options = [])
$options['id'] = static::getInputId($model, $attribute);
}
self::normalizeMaxLength($model, $attribute, $options);
self::activePlaceholder($model, $attribute, $options);
return static::textarea($name, $value, $options);
}

Expand Down
18 changes: 18 additions & 0 deletions tests/framework/helpers/HtmlTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -1579,6 +1579,24 @@ public function testActiveRadioList()
$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);
}
}

/**
Expand Down

0 comments on commit 78d76c3

Please sign in to comment.