Commit 7728274c by Alexander Makarov

Fixes #4122: `Html::error()` and `Html::errorSummary()` are now accepting…

Fixes #4122: `Html::error()` and `Html::errorSummary()` are now accepting `encode` option. If set to false it prevents encoding of error messages
parent 10703442
...@@ -158,6 +158,7 @@ Yii Framework 2 Change Log ...@@ -158,6 +158,7 @@ Yii Framework 2 Change Log
- Enh #4080: Added proper handling and support of the symlinked directories in `FileHelper`, added $options parameter in `FileHelper::removeDirectory()` (resurtm) - Enh #4080: Added proper handling and support of the symlinked directories in `FileHelper`, added $options parameter in `FileHelper::removeDirectory()` (resurtm)
- Enh #4086: changedAttributes of afterSave Event now contain old values (dizews) - Enh #4086: changedAttributes of afterSave Event now contain old values (dizews)
- Enh #4114: Added `Security::generateRandomBytes()`, improved tests (samdark) - Enh #4114: Added `Security::generateRandomBytes()`, improved tests (samdark)
- Enh #4122: `Html::error()` and `Html::errorSummary()` are now accepting `encode` option. If set to false it prevents encoding of error messages (samdark)
- Enh #4131: Security adjustments (tom--) - Enh #4131: Security adjustments (tom--)
- Added HKDF to `yii\base\Security`. - Added HKDF to `yii\base\Security`.
- Reverted auto fallback to PHP PBKDF2. - Reverted auto fallback to PHP PBKDF2.
......
...@@ -1067,6 +1067,7 @@ class BaseHtml ...@@ -1067,6 +1067,7 @@ class BaseHtml
* *
* - header: string, the header HTML for the error summary. If not set, a default prompt string will be used. * - header: string, the header HTML for the error summary. If not set, a default prompt string will be used.
* - footer: string, the footer HTML for the error summary. * - footer: string, the footer HTML for the error summary.
* - encode: boolean, if set to false then value won't be encoded.
* *
* The rest of the options will be rendered as the attributes of the container tag. The values will * The rest of the options will be rendered as the attributes of the container tag. The values will
* be HTML-encoded using [[encode()]]. If a value is null, the corresponding attribute will not be rendered. * be HTML-encoded using [[encode()]]. If a value is null, the corresponding attribute will not be rendered.
...@@ -1074,6 +1075,11 @@ class BaseHtml ...@@ -1074,6 +1075,11 @@ class BaseHtml
*/ */
public static function errorSummary($models, $options = []) public static function errorSummary($models, $options = [])
{ {
$header = isset($options['header']) ? $options['header'] : '<p>' . Yii::t('yii', 'Please fix the following errors:') . '</p>';
$footer = isset($options['footer']) ? $options['footer'] : '';
$encode = !isset($options['encode']) || $options['encode'] !== false;
unset($options['header'], $options['footer'], $options['encode']);
$lines = []; $lines = [];
if (!is_array($models)) { if (!is_array($models)) {
$models = [$models]; $models = [$models];
...@@ -1081,14 +1087,10 @@ class BaseHtml ...@@ -1081,14 +1087,10 @@ class BaseHtml
foreach ($models as $model) { foreach ($models as $model) {
/* @var $model Model */ /* @var $model Model */
foreach ($model->getFirstErrors() as $error) { foreach ($model->getFirstErrors() as $error) {
$lines[] = Html::encode($error); $lines[] = $encode ? Html::encode($error) : $error;
} }
} }
$header = isset($options['header']) ? $options['header'] : '<p>' . Yii::t('yii', 'Please fix the following errors:') . '</p>';
$footer = isset($options['footer']) ? $options['footer'] : '';
unset($options['header'], $options['footer']);
if (empty($lines)) { if (empty($lines)) {
// still render the placeholder for client-side validation use // still render the placeholder for client-side validation use
$content = "<ul></ul>"; $content = "<ul></ul>";
...@@ -1111,6 +1113,7 @@ class BaseHtml ...@@ -1111,6 +1113,7 @@ class BaseHtml
* The following options are specially handled: * The following options are specially handled:
* *
* - tag: this specifies the tag name. If not set, "div" will be used. * - tag: this specifies the tag name. If not set, "div" will be used.
* - encode: boolean, if set to false then value won't be encoded.
* *
* See [[renderTagAttributes()]] for details on how attributes are being rendered. * See [[renderTagAttributes()]] for details on how attributes are being rendered.
* *
...@@ -1121,8 +1124,9 @@ class BaseHtml ...@@ -1121,8 +1124,9 @@ class BaseHtml
$attribute = static::getAttributeName($attribute); $attribute = static::getAttributeName($attribute);
$error = $model->getFirstError($attribute); $error = $model->getFirstError($attribute);
$tag = isset($options['tag']) ? $options['tag'] : 'div'; $tag = isset($options['tag']) ? $options['tag'] : 'div';
unset($options['tag']); $encode = !isset($options['encode']) || $options['encode'] !== false;
return Html::tag($tag, Html::encode($error), $options); unset($options['tag'], $options['encode']);
return Html::tag($tag, $encode ? Html::encode($error) : $error, $options);
} }
/** /**
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment