2017-08-02 56 views
0

我已经安装了Magento 2.1.0。 我试图在打开程序中的每个产品页面之前更新库存状态。在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} 

我不知道如何解决这个问题。
于是我找到的文件AbstractSource.php上线74

enter image description here

我更改代码:

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

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

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

但我有两个问题:

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

非常感谢!

回答

1

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

所以我建议你从布尔改变参数整数:0false1true

让我知道如果解决它。其次,我很好奇你为什么需要这样做,摆在首位。

+0

对不起,我得到了同样的例外...如果我更改了代码。 $ options ['value']回到$ options [$ value] –

+0

我有另一个系统:库存管理系统。 Magento Shop中的所有产品都需要从我的库存管理系统中加载库存信息。 每次在Magento Shop打开产品页面之前,第一步都是通过我的库存管理系统的API加载库存数量。 –

+0

您可以暂时在74和75周围放置一个try catch块,并转储两个变量$ value和$ options的值。 – davidumoh