mirror of
				https://github.com/yiisoft/yii2.git
				synced 2025-11-04 06:37:55 +08:00 
			
		
		
		
	Fixes #3008: Added Html::errorSummary()
				
					
				
			This commit is contained in:
		@ -21,6 +21,7 @@ Yii Framework 2 Change Log
 | 
			
		||||
- Bug #3204: `yii\di\Container` did not handle the `$config` parameter well in case when it does not have a default value (qiangxue)
 | 
			
		||||
- Bug #3216: Fixed the bug that `yii.activeForm.destroy()` did not remove `submit` event handlers (qiangxue)
 | 
			
		||||
- Enh #2837: Error page now shows arguments in stack trace method calls (samdark)
 | 
			
		||||
- Enh #3008: Added `Html::errorSummary()` (qiangxue)
 | 
			
		||||
- Enh #3088: The debug and gii modules will manage their own URL rules now (hiltonjanfield, qiangxue)
 | 
			
		||||
- Enh #3103: debugger panel is now not displayed when printing a page (githubjeka)
 | 
			
		||||
- Enh #3108: Added `yii\debug\Module::enableDebugLogs` to disable logging debug logs by default (qiangxue)
 | 
			
		||||
 | 
			
		||||
@ -1031,6 +1031,43 @@ class BaseHtml
 | 
			
		||||
        return static::label($label, $for, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Generates a summary of the validation errors.
 | 
			
		||||
     * If there is no validation error, an empty error summary markup will still be generated, but it will be hidden.
 | 
			
		||||
     * @param Model|Model[] $models the model(s) whose validation errors are to be displayed
 | 
			
		||||
     * @param array $options the tag options in terms of name-value pairs. The following options are specially handled:
 | 
			
		||||
     *
 | 
			
		||||
     * - 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.
 | 
			
		||||
     *
 | 
			
		||||
     * 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.
 | 
			
		||||
     * @return string the generated error summary
 | 
			
		||||
     */
 | 
			
		||||
    public static function errorSummary($models, $options = [])
 | 
			
		||||
    {
 | 
			
		||||
        $lines = [];
 | 
			
		||||
        foreach ((array)$models as $model) {
 | 
			
		||||
            /** @var Model $model */
 | 
			
		||||
            foreach ($model->getFirstErrors() as $error) {
 | 
			
		||||
                $lines[] = Html::encode($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)) {
 | 
			
		||||
            // still render the placeholder for client-side validation use
 | 
			
		||||
            $content = "<ul></ul>";
 | 
			
		||||
            $options['style'] = isset($options['style']) ? rtrim($options['style'], ';') . '; display:none' : 'display:none';
 | 
			
		||||
        } else {
 | 
			
		||||
            $content = "<ul><li>" . implode("</li>\n<li>", $lines) . "</li></ul>";
 | 
			
		||||
        }
 | 
			
		||||
        return Html::tag('div', $header . $content . $footer, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Generates a tag that contains the first validation error of the specified model attribute.
 | 
			
		||||
     * Note that even if there is no validation error, this method will still return an empty error tag.
 | 
			
		||||
 | 
			
		||||
@ -217,41 +217,12 @@ class ActiveForm extends Widget
 | 
			
		||||
     * The rest of the options will be rendered as the attributes of the container tag. The values will
 | 
			
		||||
     * be HTML-encoded using [[\yii\helpers\Html::encode()]]. If a value is null, the corresponding attribute will not be rendered.
 | 
			
		||||
     * @return string the generated error summary
 | 
			
		||||
     * @see errorSummaryCssClass
 | 
			
		||||
     */
 | 
			
		||||
    public function errorSummary($models, $options = [])
 | 
			
		||||
    {
 | 
			
		||||
        if (!is_array($models)) {
 | 
			
		||||
            $models = [$models];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        $lines = [];
 | 
			
		||||
        foreach ($models as $model) {
 | 
			
		||||
            /** @var Model $model */
 | 
			
		||||
            foreach ($model->getFirstErrors() as $error) {
 | 
			
		||||
                $lines[] = Html::encode($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 (!isset($options['class'])) {
 | 
			
		||||
            $options['class'] = $this->errorSummaryCssClass;
 | 
			
		||||
        } else {
 | 
			
		||||
            $options['class'] .= ' ' . $this->errorSummaryCssClass;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if (!empty($lines)) {
 | 
			
		||||
            $content = "<ul><li>" . implode("</li>\n<li>", $lines) . "</li></ul>";
 | 
			
		||||
 | 
			
		||||
            return Html::tag('div', $header . $content . $footer, $options);
 | 
			
		||||
        } else {
 | 
			
		||||
            $content = "<ul></ul>";
 | 
			
		||||
            $options['style'] = isset($options['style']) ? rtrim($options['style'], ';') . '; display:none' : 'display:none';
 | 
			
		||||
 | 
			
		||||
            return Html::tag('div', $header . $content . $footer, $options);
 | 
			
		||||
        }
 | 
			
		||||
        Html::addCssClass($options, $this->errorSummaryCssClass);
 | 
			
		||||
        return Html::errorSummary($models, $options);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 | 
			
		||||
		Reference in New Issue
	
	Block a user