Skip to content

Commit cf7477a

Browse files
committed
#8647: [GitHub] Order of how arguments are merged in multiple di.xml-files causes unexpected results
1 parent 3620313 commit cf7477a

File tree

2 files changed

+30
-14
lines changed

2 files changed

+30
-14
lines changed

lib/internal/Magento/Framework/Webapi/Rest/Response/RendererFactory.php

Lines changed: 29 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -71,20 +71,10 @@ protected function _getRendererClass()
7171
if (!is_array($acceptTypes)) {
7272
$acceptTypes = [$acceptTypes];
7373
}
74-
// If Accept type = '*/*' then return default renderer.
75-
$defaultRenderer = isset($this->_renders['default']) ? $this->_renders['default'] : null;
7674
foreach ($acceptTypes as $acceptType) {
77-
if ($acceptType == '*/*' && $defaultRenderer) {
78-
return $defaultRenderer['model'];
79-
}
80-
foreach ($this->_renders as $rendererConfig) {
81-
$rendererType = $rendererConfig['type'];
82-
if ($acceptType == $rendererType || $acceptType == current(
83-
explode('/', $rendererType)
84-
) . '/*' || $acceptType == '*/*'
85-
) {
86-
return $rendererConfig['model'];
87-
}
75+
$renderer = $this->getRendererConfig($acceptType);
76+
if ($renderer !== null) {
77+
return $renderer['model'];
8878
}
8979
}
9080
/** If server does not have renderer for any of the accepted types it SHOULD send 406 (not acceptable). */
@@ -98,4 +88,30 @@ protected function _getRendererClass()
9888
\Magento\Framework\Webapi\Exception::HTTP_NOT_ACCEPTABLE
9989
);
10090
}
91+
92+
/**
93+
* Get renderer config by accept type.
94+
*
95+
* @param string $acceptType
96+
* @return array|null
97+
*/
98+
private function getRendererConfig($acceptType)
99+
{
100+
// If Accept type = '*/*' then return default renderer.
101+
if ($acceptType == '*/*' && isset($this->_renders['default'])) {
102+
return $this->_renders['default'];
103+
}
104+
105+
foreach ($this->_renders as $rendererConfig) {
106+
$rendererType = $rendererConfig['type'];
107+
if ($acceptType == $rendererType
108+
|| $acceptType == current(explode('/', $rendererType)) . '/*'
109+
|| $acceptType == '*/*'
110+
) {
111+
return $rendererConfig;
112+
}
113+
}
114+
115+
return null;
116+
}
101117
}

lib/internal/Magento/Framework/Webapi/Test/Unit/Rest/Response/RendererFactoryTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ protected function setUp()
3535
'model' => \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class,
3636
],
3737
'default' => [
38-
'type' => '*/*',
38+
'type' => '*/*',
3939
'model' => \Magento\Framework\Webapi\Rest\Response\Renderer\Json::class
4040
],
4141
];

0 commit comments

Comments
 (0)