2

I'm trying to implement a basic m2 class override following the M2 Fundamentals Course and it is not working. Here is what I have in my Training/Test/etc/di.xml

<?xml version="1.0"?>
<!--
/**
 * Copyright © 2015 Magento. All rights reserved.
 * See COPYING.txt for license details.
 */
-->
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
<preference for="Magento\Catalog\Model\Product" type="Training\Test\Model\Testproduct" />
</config>

And inside the Training\Test\Model\Testproduct.php

<?php
namespace Training\Test\Model;
class Testproduct extends \Magento\Catalog\Model\Product
{
 public function getPrice() {
 return 3;
 }
} 

I understand it's better to do plugins / events, but my question is why is the above not working?

The module is installed and I also ran the following:

php bin/magento cache:flush
rm -Rf var/cache/*
rm -Rf var/di/
rm -Rf var/generation/*
rm -Rf var/page_cache/*
php bin/magento setup:di:compile

It also shows when runnning: php bin/magento module:status

List of enabled modules:
...
Training_Test
mapaladiya
6176 silver badges15 bronze badges
asked Nov 30, 2015 at 0:24
5
  • Looks like your module is not installed, isn't it? Commented Nov 30, 2015 at 8:06
  • It is installed. I also ran the following: php bin/magento cache:flush 993 rm -Rf var/cache/* 994 rm -Rf var/di/ 995 rm -Rf var/generation/* 996 rm -Rf var/page_cache/* 997 php bin/magento setup:di:compile Commented Nov 30, 2015 at 14:36
  • Can you describe how are you setup magento and add module to it? Commented Nov 30, 2015 at 18:08
  • How I setup Magento? I followed the install guide and everything works fine on that front. I then followed the tutorial for building the module and ran: php -f bin/magento module:enable Training_Test I also, verified that if I change this module code to work as a plugin, it works properly. But overriding a class as above does not work. Commented Nov 30, 2015 at 18:23
  • In my view you should not override Magento classes. You may want to use Magento Plugins and extend functionality with your custom logic. Commented Jan 21, 2016 at 0:36

1 Answer 1

10

You can try this simple module to override \Magento\Catalog\Model\Product class. It 100% works on my local Magento 2 test environment.

Base folder: app\code

Directory tree:

└── Example
 └── OverrideModel
 ├── composer.json
 ├── etc
 │  ├── frontend
 │  │  └── di.xml
 │  └── module.xml
 ├── Model
 │  └── Product.php
 └── registration.php

File: Example/OverrideModel/composer.json

{
 "name": "example/overridemodel",
 "description": "OverrideModel module for Magento 2",
 "type": "magento2-module",
 "version": "1.0.0",
 "license": [
 "OSL-3.0",
 "AFL-3.0"
 ],
 "require": {
 "php": "~5.5.0|~5.6.0|~7.0.0",
 "magento/module-catalog": "~100.0"
 },
 "autoload": {
 "files": [
 "registration.php"
 ],
 "psr-4": {
 "Example\\OverrideModel\\": ""
 }
 }
}

File: Example/OverrideModel/registration.php

<?php
use \Magento\Framework\Component\ComponentRegistrar;
ComponentRegistrar::register(ComponentRegistrar::MODULE, 'Example_OverrideModel', __DIR__);

File: Example/OverrideModel/etc/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="Example_OverrideModel" setup_version="1.0.0">
 <sequence>
 <module name="Magento_Catalog"/>
 </sequence>
 </module>
</config>

File: Example/OverrideModel/etc/frontend/di.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
 <preference for="Magento\Catalog\Model\Product" type="Example\OverrideModel\Model\Product" />
</config>

File: Example/OverrideModel/Model/Product.php

<?php
namespace Example\OverrideModel\Model;
class Product extends \Magento\Catalog\Model\Product {
 public function getPrice()
 {
 return 3;
 }
}
answered Jul 1, 2016 at 15:01
1
  • Wish there was a 'highlight' function. Took me ages to see 'extends' rather than 'implements' and finally everything clicked. Commented Mar 15, 2018 at 9:04

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.