0

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

asked Dec 13, 2021 at 14:24

1 Answer 1

0

I think one of the modules you installed is causing this error. You can disable each module and check which module is the cause.

answered Dec 16, 2021 at 3:42

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.