【问题标题】:Got exception when open the product page in Magento 2.1.0在 Magento 2.1.0 中打开产品页面时出现异常
【发布时间】:2017-08-02 08:03:40
【问题描述】:

我已经安装了 Magento 2.1.0。 我尝试在程序中打开每个产品页面之前更新库存状态。

我用来更新股票的代码:

// has $sku and quantity of product now
$stockItem = $this->_stockRegistry->getStockItemBySku($sku);
if($quantity > 0){
    $stockItem->setQty($quantity);
    $stockItem->setIsInStock(true);
}else{
    $stockItem->setQty(0);
    $stockItem->setIsInStock(false);
}
$this->_stockRegistry->updateStockItemBySku($sku, $stockItem);

由于以下异常,我突然无法打开产品页面:
不知道是不是因为产品库存的更新。

1 exception(s):
Exception #0 (Exception): Warning: Illegal offset type in isset or empty in D:\www_wamp_3.0.6\YingStyle\vendor\magento\module-eav\Model\Entity\Attribute\Source\AbstractSource.php on line 74

Exception #0 (Exception): Warning: Illegal offset type in isset or empty in D:\www_wamp_3.0.6\YingStyle\vendor\magento\module-eav\Model\Entity\Attribute\Source\AbstractSource.php on line 74
#0 D:\www_wamp_3.0.6\YingStyle\vendor\magento\module-eav\Model\Entity\Attribute\Source\AbstractSource.php(74): Magento\Framework\App\ErrorHandler->handler(2, 'Illegal offset ...', 'D:\\www_wamp_3.0...', 74, Array)
#1 D:\www_wamp_3.0.6\YingStyle\vendor\magento\module-eav\Model\Entity\Attribute\Frontend\AbstractFrontend.php(232): Magento\Eav\Model\Entity\Attribute\Source\AbstractSource->getOptionText(Array)
#2 D:\www_wamp_3.0.6\YingStyle\vendor\magento\module-eav\Model\Entity\Attribute\Frontend\AbstractFrontend.php(107): Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend->getOption(Array)
#3 D:\www_wamp_3.0.6\YingStyle\vendor\magento\module-catalog\Block\Product\View\Attributes.php(79): Magento\Eav\Model\Entity\Attribute\Frontend\AbstractFrontend->getValue(Object(Magento\Catalog\Model\Product\Interceptor))
#4 D:\www_wamp_3.0.6\YingStyle\vendor\magento\module-catalog\view\frontend\templates\product\view\attributes.phtml(19): Magento\Catalog\Block\Product\View\Attributes->getAdditionalData()
#5 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\TemplateEngine\Php.php(59): include('D:\\www_wamp_3.0...')
#6 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Element\Template.php(255): Magento\Framework\View\TemplateEngine\Php->render(Object(Magento\Catalog\Block\Product\View\Attributes), 'D:/www_wamp_3.0...', Array)
#7 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Element\Template.php(279): Magento\Framework\View\Element\Template->fetchView('D:/www_wamp_3.0...')
#8 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Element\AbstractBlock.php(659): Magento\Framework\View\Element\Template->_toHtml()
#9 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(542): Magento\Framework\View\Element\AbstractBlock->toHtml()
#10 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(518): Magento\Framework\View\Layout->_renderBlock('product.attribu...')
#11 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('product.attribu...')
#12 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('product.attribu...')
#13 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(193): Magento\Framework\View\Layout->renderElement('product.attribu...', true)
#14 D:\www_wamp_3.0.6\YingStyle\app\design\frontend\Smartwave\porto\Magento_Catalog\templates\product\view\details.phtml(24): Magento\Framework\View\Layout\Interceptor->renderElement('product.attribu...')
#15 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\TemplateEngine\Php.php(59): include('D:\\www_wamp_3.0...')
#16 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Element\Template.php(255): Magento\Framework\View\TemplateEngine\Php->render(Object(Magento\Catalog\Block\Product\View\Description), 'D:/www_wamp_3.0...', Array)
#17 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Element\Template.php(279): Magento\Framework\View\Element\Template->fetchView('D:/www_wamp_3.0...')
#18 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Element\AbstractBlock.php(659): Magento\Framework\View\Element\Template->_toHtml()
#19 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(542): Magento\Framework\View\Element\AbstractBlock->toHtml()
#20 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(518): Magento\Framework\View\Layout->_renderBlock('product.info.de...')
#21 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('product.info.de...')
#22 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('product.info.de...')
#23 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(193): Magento\Framework\View\Layout->renderElement('product.info.de...', true)
#24 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('product.info.de...')
#25 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(520): Magento\Framework\View\Layout->_renderContainer('content')
#26 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('content')
#27 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('content')
#28 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(193): Magento\Framework\View\Layout->renderElement('content', true)
#29 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('content')
#30 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(520): Magento\Framework\View\Layout->_renderContainer('main')
#31 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('main')
#32 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('main')
#33 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(193): Magento\Framework\View\Layout->renderElement('main', true)
#34 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('main')
#35 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(520): Magento\Framework\View\Layout->_renderContainer('columns')
#36 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('columns')
#37 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('columns')
#38 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(193): Magento\Framework\View\Layout->renderElement('columns', true)
#39 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('columns')
#40 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(520): Magento\Framework\View\Layout->_renderContainer('main.content')
#41 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('main.content')
#42 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('main.content')
#43 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(193): Magento\Framework\View\Layout->renderElement('main.content', true)
#44 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('main.content')
#45 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(520): Magento\Framework\View\Layout->_renderContainer('page.wrapper')
#46 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('page.wrapper')
#47 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('page.wrapper')
#48 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(193): Magento\Framework\View\Layout->renderElement('page.wrapper', true)
#49 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(569): Magento\Framework\View\Layout\Interceptor->renderElement('page.wrapper')
#50 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(520): Magento\Framework\View\Layout->_renderContainer('root')
#51 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(206): Magento\Framework\View\Layout->renderNonCachedElement('root')
#52 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(472): Magento\Framework\View\Layout\Interceptor->renderNonCachedElement('root')
#53 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(193): Magento\Framework\View\Layout->renderElement('root', true)
#54 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Layout.php(938): Magento\Framework\View\Layout\Interceptor->renderElement('root')
#55 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\Interception\Interceptor.php(146): Magento\Framework\View\Layout->getOutput()
#56 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Layout\Interceptor.php(494): Magento\Framework\View\Layout\Interceptor->___callPlugins('getOutput', Array, Array)
#57 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Result\Page.php(243): Magento\Framework\View\Layout\Interceptor->getOutput()
#58 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\View\Result\Layout.php(164): Magento\Framework\View\Result\Page->render(Object(Magento\Framework\App\Response\Http\Interceptor))
#59 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\Interception\Interceptor.php(74): Magento\Framework\View\Result\Layout->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#60 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\Interception\Chain\Chain.php(70): Magento\Framework\View\Result\Page\Interceptor->___callParent('renderResult', Array)
#61 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\Interception\Chain\Chain.php(63): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'renderResult', Object(Magento\Framework\View\Result\Page\Interceptor), Array, 'result-varnish-...')
#62 D:\www_wamp_3.0.6\YingStyle\vendor\magento\module-page-cache\Model\Controller\Result\VarnishPlugin.php(74): Magento\Framework\Interception\Chain\Chain->Magento\Framework\Interception\Chain\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#63 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\Interception\Chain\Chain.php(67): Magento\PageCache\Model\Controller\Result\VarnishPlugin->aroundRenderResult(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Closure), Object(Magento\Framework\App\Response\Http\Interceptor))
#64 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\Interception\Interceptor.php(138): Magento\Framework\Interception\Chain\Chain->invokeNext('Magento\\Framewo...', 'renderResult', Object(Magento\Framework\View\Result\Page\Interceptor), Array, 'result-builtin-...')
#65 D:\www_wamp_3.0.6\YingStyle\vendor\magento\module-page-cache\Model\Controller\Result\BuiltinPlugin.php(67): Magento\Framework\View\Result\Page\Interceptor->Magento\Framework\Interception\{closure}(Object(Magento\Framework\App\Response\Http\Interceptor))
#66 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\Interception\Interceptor.php(142): Magento\PageCache\Model\Controller\Result\BuiltinPlugin->aroundRenderResult(Object(Magento\Framework\View\Result\Page\Interceptor), Object(Closure), Object(Magento\Framework\App\Response\Http\Interceptor))
#67 D:\www_wamp_3.0.6\YingStyle\var\generation\Magento\Framework\View\Result\Page\Interceptor.php(130): Magento\Framework\View\Result\Page\Interceptor->___callPlugins('renderResult', Array, Array)
#68 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\App\Http.php(139): Magento\Framework\View\Result\Page\Interceptor->renderResult(Object(Magento\Framework\App\Response\Http\Interceptor))
#69 D:\www_wamp_3.0.6\YingStyle\vendor\magento\framework\App\Bootstrap.php(258): Magento\Framework\App\Http->launch()
#70 D:\www_wamp_3.0.6\YingStyle\index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#71 {main}

我不知道如何解决这个问题。
所以我在第 74 行找到了文件 AbstractSource.php。

我更改了代码:

//if (isset($options[$value])) {
    //return $options[$value];
//}

// new code here
if (isset($options['value'])) {
    return $options['value'];
}

现在我可以再次打开产品...

但我有两个问题:

  1. 如何以正确的方式解决此问题/异常?我想我不能修改文件 AbstractSource.php
  2. 如果我使用代码“$option['value']”还有其他问题吗?

非常感谢!!!

【问题讨论】:

    标签: magento2


    【解决方案1】:

    您收到的错误与产品页面中的选择元素没有获得正确的选项值或您提供的值不是有效的选项值有关。 从您的代码来看,它似乎来自您使用 setIsInStock 的方式。从 magento 代码块文档中,这应该是合法的,因为 setIsInStock 采用 bool 或 int。但是从 Magento Core 代码示例中,他们使用 int。例如: setIsInStock(1)。 你可以在这里找到一个例子: https://github.com/magento/magento2/blob/2.1.0/dev/tests/api-functional/testsuite/Magento/ConfigurableProduct/Api/CartItemRepositoryTest.php#L220

    所以我建议您将参数从布尔值更改为整数:0 用于 false1 用于 true

    如果解决了请告诉我。

    其次,我很好奇您为什么首先需要这样做。

    【讨论】:

    • 很抱歉我遇到了同样的异常...如果我改回代码。 $options['value'] 返回 $options[$value]
    • 我有另一个系统:库存管理系统。 Magento Shop 中的所有产品都需要从我的库存管理系统中加载库存信息。每次我们在 Magento Shop 中打开产品页面之前,第一步都是通过我的库存管理系统的 API 加载库存数量。
    • 你能不能在 74 和 75 附近临时放置一个 try catch 块并转储两个变量 $value 和 $options 的值。
    猜你喜欢
    • 1970-01-01
    • 2016-09-06
    • 2010-12-31
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多