3

My di.xml file

<?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\Customer\Model\ResourceModel\AddressRepository" type="Maha\CreateLastname\Model\ResourceModel\AddressRepository" />
</config>

AddressRepository.php file(override model file)

<?php
    namespace Maha\CreateLastname\Model\ResourceModel; 
    class AddressRepository extends \Magento\Customer\Model\ResourceModel\AddressRepository
    { 
        private function _validate(CustomerAddressModel $customerAddressModel)  {
            echo "Model Rewrite Working";
            die();
        }
    }

I want override the private function in this code. What can I do? I want to change anything in my code

1 Answer 1

4

Private functions cannot overridden in child class.

If you want to change the logic in _validate function you can use below method.

Override save function, inside that instead of calling $this->_validate($addressModel) function use your own custom function, like below

private function _validateCustom(CustomerAddressModel $customerAddressModel) {
//your custom validation logic
}

Change the di.xml into

<?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\Customer\Api\AddressRepositoryInterface" type="Maha\CreateLastname\Model\ResourceModel\AddressRepository" />
</config>

Because in the AccountManagement.php they injected AddressRepositoryInterface in __constructor.

You can achieve this by using plugin as well and that is recommended way.

13
  • but it's not working.please explain code briefly
    – Mahi M
    Commented Nov 9, 2017 at 7:39
  • Can you update the question with the latest code which you tried Commented Nov 9, 2017 at 7:48
  • <?php namespace Maha\CreateLastname\Plugin\Customer\Model\ResourceModel; class AddressRepository { public function save() { echo "save form"; } private function _validate(CustomerAddressModel $customerAddressModel) { echo "hi";exit; } } ?>
    – Mahi M
    Commented Nov 9, 2017 at 8:26
  • is the execution is going into save function?? Commented Nov 9, 2017 at 8:43
  • 1
    One more doubt,admin panel->allcustomer->edit->address....throw error last name is required field
    – Mahi M
    Commented Nov 9, 2017 at 13:11

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.