Trong quá trình phát triển mô-đun, tôi đã viết một plugin sửa đổi bộ sưu tập tùy chọn sản phẩm trước khi được tải (thêm trường mô tả). Nó đây rồi:
vv / di.xml
<type name="Magento\Catalog\Model\ResourceModel\Product\Option\Collection">
<plugin name="addOptionDescription" type="Vendor\Module\Plugin\Product\Option\Collection" sortOrder="10" disabled="false"/>
</type>
Mã số:
<?php
namespace Vendor\Module\Plugin\Product\Option;
use Vendor\Module\Model\OptionDescription;
use Magento\Catalog\Model\ResourceModel\Product\Option\Collection as OptionCollection;
class Collection
{
/**
* @var \Vendor\Module\Helper\Data
*/
protected $helper;
public function __construct(
\Vendor\Module\Helper\Data $helper
) {
$this->helper = $helper;
}
/**
* @param OptionCollection $subject
* @param bool $printQuery
* @param bool $logQuery
* @return array
*/
public function beforeLoad($subject, $printQuery = false, $logQuery = false)
{
if (!$subject->isLoaded()) {
$this->addDescriptionToResult($subject);
}
return [$printQuery, $logQuery];
}
/**
* Add description to result
*
* If yo get error message "Warning: Illegal string offset 'is_in_stock' ... "
* @see http://devdocs.magento.com/guides/v2.0/install-gde/trouble/php/tshoot_opcache.html
*
* @param OptionCollection $collection
* @return OptionCollection $collection
*/
private function addDescriptionToResult($collection)
{
$tableName = OptionDescription::TABLE_NAME;
$joinDescriptionExpr = 'main_table.unique_option_id = option_description.unique_option_id AND option_description.store_id = 0';
$collection->getSelect()->joinLeft(
['option_description' => $tableName],
$joinDescriptionExpr,
['description' => 'description']
);
return $collection;
}
/**
* Resolve current store id
*
* @return int
*/
protected function getStoreId()
{
return $this->helper->resolveCurrentStoreId();
}
}
Mọi thứ dường như đều ổn, nhưng ... Khi tôi cố tải trang chỉnh sửa sản phẩm hiện có (trên phụ trợ) tôi thấy lỗi sau:
Cảnh báo: offset chuỗi bất hợp pháp 'is_in_stock' trong [...] / nhà cung cấp / magento / mô-đun-catalog-tồn kho / Ui / DataProvider / Sản phẩm / Biểu mẫu / Công cụ sửa đổi / AdvancedInventory.php trên dòng 87
Trong trường hợp tôi thực hiện các thay đổi vì nó được chỉ định trong tài liệu (được đặt opcache.save_comments = 1
bên trong cấu hình php-fpm của tôi), mọi thứ đều hoạt động tốt. Nhưng tôi không thể hiểu, mã nào gây ra lỗi ở trên và làm cách nào tôi có thể ngăn chặn nó mà không cần sửa đổi cấu hình?