【发布时间】:2018-06-14 16:39:14
【问题描述】:
我在 Magento 2.2.2 中创建了一个自定义模块,它扩展了 \Magento\GroupedProduct\Model\Product\Type\Grouped 类。
该模块已成功安装并在网站上启用,但是,我收到一个 PHP 致命错误:未捕获的错误:在 ../vendor/magento/framework/ObjectManager 中找不到类“ExtraMile\Catalog\Model\Grouped” /Factory/AbstractFactory.php:111.
我的模块文件夹结构如下:
模块文件夹结构图
di.xml 文件包含:
<?php
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::MODULE,
'ExtraMile_GroupedProduct',
__DIR__
);
module.xml 文件包含:
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Module/etc/module.xsd">
<module name="ExtraMile_GroupedProduct" setup_version="1.0.2">
<sequence>
<module name="Magento_GroupedProduct"/>
</sequence>
</module>
</config>
Grouped.php 文件包含:
<?php
namespace ExtraMile\GroupedProduct\Model;
class Grouped extends \Magento\GroupedProduct\Model\Product\Type\Grouped
{
public function getAssociatedProducts($product)
{
if (!$product->hasData($this->_keyAssociatedProducts)) {
$associatedProducts = [];
$this->setSaleableStatus($product);
$collection = $this->getAssociatedProductCollection(
$product
)->addAttributeToSelect(
['name', 'price', 'special_price', 'special_from_date', 'special_to_date', 'tax_class_id']
)->addFilterByRequiredOptions()->setPositionOrder()->addStoreFilter(
$this->getStoreFilter($product)
)->addAttributeToFilter(
'status',
['in' => $this->getStatusFilters($product)]
);
foreach ($collection as $item) {
$associatedProducts[] = $item;
}
$product->setData($this->_keyAssociatedProducts, $associatedProducts);
}
return $product->getData($this->_keyAssociatedProducts);
}
}
bin/magento setup:di:compile 已运行多次。
我遵循了许多教程,例如:http://inchoo.net/magento-2/overriding-classes-magento-2/,但我不明白为什么会出现错误。请问哪位大神能指点一下是什么问题?
【问题讨论】:
-
它已经将
Catalog插入到您的命名空间中。这可能是di配置错误......为什么你在那个文件中有PHP,或者你的问题是一个错误?它应该是 XML,不是吗?并且应该指定模型的映射/加载以替代核心模型。 -
抱歉,我复制了registration.php的代码而不是di.xml。
标签: php class overriding magento2 extend