I am running Magento 2 CE 2.4.2 and I am facing issue each time I am deleting a product, I cannot access the product catalog from admin backend and I get this error :
Exception #0 (Exception): Notice: Array to string conversion in ///***/lib/internal/Magento/Framework/Data/Form/Element/Select.php on line 135
Here is the line 135 of the Select.php :
$html .= '>' . $this->_escape($option['label']) . '</option>' . "\n";
I didn't make any changes in this file, so I don't understand from where the problem can come and I have zero skills in php ....
Here is the full code of my Select.php :
<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace Magento\Framework\Data\Form\Element;
use Magento\Framework\App\ObjectManager;
use Magento\Framework\Escaper;
use Magento\Framework\Math\Random;
use Magento\Framework\View\Helper\SecureHtmlRenderer;
/**
* Form select element
*
* @api
* @author Magento Core Team <[email protected]>
* @since 100.0.2
*/
class Select extends AbstractElement
{
/**
* @var SecureHtmlRenderer
*/
private $secureRenderer;
/**
* @var Random
*/
private $random;
/**
* @param Factory $factoryElement
* @param CollectionFactory $factoryCollection
* @param Escaper $escaper
* @param array $data
* @param SecureHtmlRenderer|null $secureRenderer
* @param Random|null $random
*/
public function __construct(
Factory $factoryElement,
CollectionFactory $factoryCollection,
Escaper $escaper,
$data = [],
?SecureHtmlRenderer $secureRenderer = null,
?Random $random = null
) {
$secureRenderer = $secureRenderer ?? ObjectManager::getInstance()->get(SecureHtmlRenderer::class);
$random = $random ?? ObjectManager::getInstance()->get(Random::class);
parent::__construct($factoryElement, $factoryCollection, $escaper, $data, $secureRenderer, $random);
$this->setType('select');
$this->setExtType('combobox');
$this->_prepareOptions();
$this->secureRenderer = $secureRenderer;
$this->random = $random;
}
/**
* Get the element Html.
*
* @return string
*/
public function getElementHtml()
{
$this->addClass('select admin__control-select');
$html = '';
if ($this->getBeforeElementHtml()) {
$html .= '<label class="addbefore" for="' .
$this->getHtmlId() .
'">' .
$this->getBeforeElementHtml() .
'</label>';
}
$html .= '<select id="' . $this->getHtmlId() . '" name="' . $this->getName() . '" ' . $this->serialize(
$this->getHtmlAttributes()
) . $this->_getUiId() . '>' . "\n";
$value = $this->getValue();
if (!is_array($value)) {
$value = [$value];
}
if ($values = $this->getValues()) {
foreach ($values as $key => $option) {
if (!is_array($option)) {
$html .= $this->_optionToHtml(['value' => $key, 'label' => $option], $value);
} elseif (is_array($option['value'])) {
$html .= '<optgroup label="' . $option['label'] . '">' . "\n";
foreach ($option['value'] as $groupItem) {
$html .= $this->_optionToHtml($groupItem, $value);
}
$html .= '</optgroup>' . "\n";
} else {
$html .= $this->_optionToHtml($option, $value);
}
}
}
$html .= '</select>' . "\n";
if ($this->getAfterElementHtml()) {
$html .= '<label class="addafter" for="' .
$this->getHtmlId() .
'">' .
"\n{$this->getAfterElementHtml()}\n" .
'</label>' .
"\n";
}
return $html;
}
/**
* Format an option as Html
*
* @param array $option
* @param array $selected
* @return string
*/
protected function _optionToHtml($option, $selected)
{
if (is_array($option['value'])) {
$html = '<optgroup label="' . $option['label'] . '">' . "\n";
foreach ($option['value'] as $groupItem) {
$html .= $this->_optionToHtml($groupItem, $selected);
}
$html .= '</optgroup>' . "\n";
} else {
$optionId = 'optId' .$this->random->getRandomString(8);
$html = '<option value="' . $this->_escape($option['value']) . '" id="' .$optionId .'" ';
$html .= isset($option['title']) ? 'title="' . $this->_escape($option['title']) . '"' : '';
if (in_array($option['value'], $selected)) {
$html .= ' selected="selected"';
}
$html .= '>' . $this->_escape($option['label']) . '</option>' . "\n";
if (!empty($option['style'])) {
$html .= $this->secureRenderer->renderStyleAsTag($option['style'], "#$optionId");
}
}
return $html;
}
/**
* Prepare options.
*
* @return void
*/
protected function _prepareOptions()
{
$values = $this->getValues();
if (empty($values)) {
$options = $this->getOptions();
if (is_array($options)) {
$values = [];
foreach ($options as $value => $label) {
$values[] = ['value' => $value, 'label' => $label];
}
} elseif (is_string($options)) {
$values = [['value' => $options, 'label' => $options]];
}
$this->setValues($values);
}
}
/**
* Get the Html attributes.
*
* @return string[]
*/
public function getHtmlAttributes()
{
return [
'title',
'class',
'style',
'onclick',
'onchange',
'disabled',
'readonly',
'tabindex',
'data-form-part',
'data-role',
'data-action'
];
}
}
I found a post with similar issue but nothing to fix this. Any help would be much appreciated. Thanks