Commit 544981a4 by Qiang Xue

Fixes #6318: Made widgets more error-tolerant and user-friendly when certain option values are null

parent 83b0b3d4
...@@ -94,7 +94,7 @@ class Collapse extends Widget ...@@ -94,7 +94,7 @@ class Collapse extends Widget
$items = []; $items = [];
$index = 0; $index = 0;
foreach ($this->items as $item) { foreach ($this->items as $item) {
if (!isset($item['label'])) { if (!array_key_exists('label', $item)) {
throw new InvalidConfigException("The 'label' option is required."); throw new InvalidConfigException("The 'label' option is required.");
} }
$header = $item['label']; $header = $item['label'];
...@@ -116,7 +116,7 @@ class Collapse extends Widget ...@@ -116,7 +116,7 @@ class Collapse extends Widget
*/ */
public function renderItem($header, $item, $index) public function renderItem($header, $item, $index)
{ {
if (isset($item['content'])) { if (array_key_exists('content', $item)) {
$id = $this->options['id'] . '-collapse' . $index; $id = $this->options['id'] . '-collapse' . $index;
$options = ArrayHelper::getValue($item, 'contentOptions', []); $options = ArrayHelper::getValue($item, 'contentOptions', []);
$options['id'] = $id; $options['id'] = $id;
......
...@@ -84,7 +84,7 @@ class Dropdown extends Widget ...@@ -84,7 +84,7 @@ class Dropdown extends Widget
$lines[] = $item; $lines[] = $item;
continue; continue;
} }
if (!isset($item['label'])) { if (!array_key_exists('label', $item)) {
throw new InvalidConfigException("The 'label' option is required."); throw new InvalidConfigException("The 'label' option is required.");
} }
$encodeLabel = isset($item['encode']) ? $item['encode'] : $this->encodeLabels; $encodeLabel = isset($item['encode']) ? $item['encode'] : $this->encodeLabels;
......
...@@ -142,7 +142,7 @@ class Tabs extends Widget ...@@ -142,7 +142,7 @@ class Tabs extends Widget
} }
foreach ($this->items as $n => $item) { foreach ($this->items as $n => $item) {
if (!isset($item['label'])) { if (!array_key_exists('label', $item)) {
throw new InvalidConfigException("The 'label' option is required."); throw new InvalidConfigException("The 'label' option is required.");
} }
$encodeLabel = isset($item['encode']) ? $item['encode'] : $this->encodeLabels; $encodeLabel = isset($item['encode']) ? $item['encode'] : $this->encodeLabels;
...@@ -216,7 +216,7 @@ class Tabs extends Widget ...@@ -216,7 +216,7 @@ class Tabs extends Widget
if (is_string($item)) { if (is_string($item)) {
continue; continue;
} }
if (!isset($item['content'])) { if (!array_key_exists('content', $item)) {
throw new InvalidConfigException("The 'content' option is required."); throw new InvalidConfigException("The 'content' option is required.");
} }
......
...@@ -108,10 +108,10 @@ class Accordion extends Widget ...@@ -108,10 +108,10 @@ class Accordion extends Widget
{ {
$items = []; $items = [];
foreach ($this->items as $item) { foreach ($this->items as $item) {
if (!isset($item['header'])) { if (!array_key_exists('header', $item)) {
throw new InvalidConfigException("The 'header' option is required."); throw new InvalidConfigException("The 'header' option is required.");
} }
if (!isset($item['content'])) { if (!array_key_exists('content', $item)) {
throw new InvalidConfigException("The 'content' option is required."); throw new InvalidConfigException("The 'content' option is required.");
} }
$headerOptions = array_merge($this->headerOptions, ArrayHelper::getValue($item, 'headerOptions', [])); $headerOptions = array_merge($this->headerOptions, ArrayHelper::getValue($item, 'headerOptions', []));
......
...@@ -105,7 +105,7 @@ class Selectable extends Widget ...@@ -105,7 +105,7 @@ class Selectable extends Widget
$options = $this->itemOptions; $options = $this->itemOptions;
$tag = ArrayHelper::remove($options, 'tag', 'li'); $tag = ArrayHelper::remove($options, 'tag', 'li');
if (is_array($item)) { if (is_array($item)) {
if (!isset($item['content'])) { if (!array_key_exists('content', $item)) {
throw new InvalidConfigException("The 'content' option is required."); throw new InvalidConfigException("The 'content' option is required.");
} }
$options = array_merge($options, ArrayHelper::getValue($item, 'options', [])); $options = array_merge($options, ArrayHelper::getValue($item, 'options', []));
......
...@@ -128,8 +128,8 @@ class Tabs extends Widget ...@@ -128,8 +128,8 @@ class Tabs extends Widget
if (isset($item['url'])) { if (isset($item['url'])) {
$url = Url::to($item['url']); $url = Url::to($item['url']);
} else { } else {
if (!isset($item['content'])) { if (!array_key_exists('content', $item)) {
throw new InvalidConfigException("The 'content' or 'url' option is required."); throw new InvalidConfigException("Either the 'content' or 'url' option is required.");
} }
$options = array_merge($this->itemOptions, ArrayHelper::getValue($item, 'options', [])); $options = array_merge($this->itemOptions, ArrayHelper::getValue($item, 'options', []));
$tag = ArrayHelper::remove($options, 'tag', 'div'); $tag = ArrayHelper::remove($options, 'tag', 'div');
......
...@@ -73,6 +73,7 @@ Yii Framework 2 Change Log ...@@ -73,6 +73,7 @@ Yii Framework 2 Change Log
- Enh #5983: Added `Inflector::sentence()` (pana1990, qiangxue) - Enh #5983: Added `Inflector::sentence()` (pana1990, qiangxue)
- Enh #6113: Improved debugger configuration and request UI (schmunk42) - Enh #6113: Improved debugger configuration and request UI (schmunk42)
- Enh #6207: Added support for truncating HTML strings using `StringHelper::truncate()` and `StringHelper::truncateWords()` (Alex-Code) - Enh #6207: Added support for truncating HTML strings using `StringHelper::truncate()` and `StringHelper::truncateWords()` (Alex-Code)
- Enh #6318: Made widgets more error-tolerant and user-friendly when certain option values are null (qiangxue)
- Enh: `Console::confirm()` now uses `Console::stdout()` instead of `echo` to be consistent with all other functions (cebe) - Enh: `Console::confirm()` now uses `Console::stdout()` instead of `echo` to be consistent with all other functions (cebe)
- Enh: `yii\rbac\DbManager` migration now uses database component specified in component settings instead of always using default `db` (samdark) - Enh: `yii\rbac\DbManager` migration now uses database component specified in component settings instead of always using default `db` (samdark)
- Enh: Added `yii\base\Controller::renderContent()` (qiangxue) - Enh: Added `yii\base\Controller::renderContent()` (qiangxue)
......
...@@ -150,7 +150,7 @@ class Breadcrumbs extends Widget ...@@ -150,7 +150,7 @@ class Breadcrumbs extends Widget
*/ */
protected function renderItem($link, $template) protected function renderItem($link, $template)
{ {
if (isset($link['label'])) { if (array_key_exists('label', $link)) {
$label = $this->encodeLabels ? Html::encode($link['label']) : $link['label']; $label = $this->encodeLabels ? Html::encode($link['label']) : $link['label'];
} else { } else {
throw new InvalidConfigException('The "label" element is required for each link.'); throw new InvalidConfigException('The "label" element is required for each link.');
......
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