How to override model in magento2?





.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty{ margin-bottom:0;
}







5















I want to remove the below lines in MagentoQuoteModelPaymentMethodManagement model file



 if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
}


In PaymentMethodManagement file:



<?php
/**
* Copyright © Magento, Inc. All rights reserved.
* See COPYING.txt for license details.
*/
namespace MagentoQuoteModel;

use MagentoFrameworkExceptionStateInvalidTransitionException;

/**
* Class PaymentMethodManagement
*/
class PaymentMethodManagement implements MagentoQuoteApiPaymentMethodManagementInterface
{
/**
* @var MagentoQuoteApiCartRepositoryInterface
*/
protected $quoteRepository;

/**
* @var MagentoPaymentModelChecksZeroTotal
*/
protected $zeroTotalValidator;

/**
* @var MagentoPaymentModelMethodList
*/
protected $methodList;

/**
* Constructor
*
* @param MagentoQuoteApiCartRepositoryInterface $quoteRepository
* @param MagentoPaymentModelChecksZeroTotal $zeroTotalValidator
* @param MagentoPaymentModelMethodList $methodList
*/
public function __construct(
MagentoQuoteApiCartRepositoryInterface $quoteRepository,
MagentoPaymentModelChecksZeroTotal $zeroTotalValidator,
MagentoPaymentModelMethodList $methodList
) {
$this->quoteRepository = $quoteRepository;
$this->zeroTotalValidator = $zeroTotalValidator;
$this->methodList = $methodList;
}

/**
* {@inheritdoc}
*/
public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
{
/** @var MagentoQuoteModelQuote $quote */
$quote = $this->quoteRepository->get($cartId);

$method->setChecks([
MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
]);
$payment = $quote->getPayment();

$data = $method->getData();
$payment->importData($data);

if ($quote->isVirtual()) {
$quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
} else {
// check if shipping address is set
if ($quote->getShippingAddress()->getCountryId() === null) {
throw new InvalidTransitionException(__('Shipping address is not set'));
}
$quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
}
if (!$quote->isVirtual() && $quote->getShippingAddress()) {
$quote->getShippingAddress()->setCollectShippingRates(true);
}

if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
}

$quote->setTotalsCollectedFlag(false)->collectTotals()->save();
return $quote->getPayment()->getId();
}}


How to do this.
Thanks.










share|improve this question





























    5















    I want to remove the below lines in MagentoQuoteModelPaymentMethodManagement model file



     if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
    throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
    }


    In PaymentMethodManagement file:



    <?php
    /**
    * Copyright © Magento, Inc. All rights reserved.
    * See COPYING.txt for license details.
    */
    namespace MagentoQuoteModel;

    use MagentoFrameworkExceptionStateInvalidTransitionException;

    /**
    * Class PaymentMethodManagement
    */
    class PaymentMethodManagement implements MagentoQuoteApiPaymentMethodManagementInterface
    {
    /**
    * @var MagentoQuoteApiCartRepositoryInterface
    */
    protected $quoteRepository;

    /**
    * @var MagentoPaymentModelChecksZeroTotal
    */
    protected $zeroTotalValidator;

    /**
    * @var MagentoPaymentModelMethodList
    */
    protected $methodList;

    /**
    * Constructor
    *
    * @param MagentoQuoteApiCartRepositoryInterface $quoteRepository
    * @param MagentoPaymentModelChecksZeroTotal $zeroTotalValidator
    * @param MagentoPaymentModelMethodList $methodList
    */
    public function __construct(
    MagentoQuoteApiCartRepositoryInterface $quoteRepository,
    MagentoPaymentModelChecksZeroTotal $zeroTotalValidator,
    MagentoPaymentModelMethodList $methodList
    ) {
    $this->quoteRepository = $quoteRepository;
    $this->zeroTotalValidator = $zeroTotalValidator;
    $this->methodList = $methodList;
    }

    /**
    * {@inheritdoc}
    */
    public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
    {
    /** @var MagentoQuoteModelQuote $quote */
    $quote = $this->quoteRepository->get($cartId);

    $method->setChecks([
    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
    MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
    ]);
    $payment = $quote->getPayment();

    $data = $method->getData();
    $payment->importData($data);

    if ($quote->isVirtual()) {
    $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
    } else {
    // check if shipping address is set
    if ($quote->getShippingAddress()->getCountryId() === null) {
    throw new InvalidTransitionException(__('Shipping address is not set'));
    }
    $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
    }
    if (!$quote->isVirtual() && $quote->getShippingAddress()) {
    $quote->getShippingAddress()->setCollectShippingRates(true);
    }

    if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
    throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
    }

    $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
    return $quote->getPayment()->getId();
    }}


    How to do this.
    Thanks.










    share|improve this question

























      5












      5








      5








      I want to remove the below lines in MagentoQuoteModelPaymentMethodManagement model file



       if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
      throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
      }


      In PaymentMethodManagement file:



      <?php
      /**
      * Copyright © Magento, Inc. All rights reserved.
      * See COPYING.txt for license details.
      */
      namespace MagentoQuoteModel;

      use MagentoFrameworkExceptionStateInvalidTransitionException;

      /**
      * Class PaymentMethodManagement
      */
      class PaymentMethodManagement implements MagentoQuoteApiPaymentMethodManagementInterface
      {
      /**
      * @var MagentoQuoteApiCartRepositoryInterface
      */
      protected $quoteRepository;

      /**
      * @var MagentoPaymentModelChecksZeroTotal
      */
      protected $zeroTotalValidator;

      /**
      * @var MagentoPaymentModelMethodList
      */
      protected $methodList;

      /**
      * Constructor
      *
      * @param MagentoQuoteApiCartRepositoryInterface $quoteRepository
      * @param MagentoPaymentModelChecksZeroTotal $zeroTotalValidator
      * @param MagentoPaymentModelMethodList $methodList
      */
      public function __construct(
      MagentoQuoteApiCartRepositoryInterface $quoteRepository,
      MagentoPaymentModelChecksZeroTotal $zeroTotalValidator,
      MagentoPaymentModelMethodList $methodList
      ) {
      $this->quoteRepository = $quoteRepository;
      $this->zeroTotalValidator = $zeroTotalValidator;
      $this->methodList = $methodList;
      }

      /**
      * {@inheritdoc}
      */
      public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
      {
      /** @var MagentoQuoteModelQuote $quote */
      $quote = $this->quoteRepository->get($cartId);

      $method->setChecks([
      MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
      MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
      MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
      MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
      ]);
      $payment = $quote->getPayment();

      $data = $method->getData();
      $payment->importData($data);

      if ($quote->isVirtual()) {
      $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
      } else {
      // check if shipping address is set
      if ($quote->getShippingAddress()->getCountryId() === null) {
      throw new InvalidTransitionException(__('Shipping address is not set'));
      }
      $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
      }
      if (!$quote->isVirtual() && $quote->getShippingAddress()) {
      $quote->getShippingAddress()->setCollectShippingRates(true);
      }

      if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
      throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
      }

      $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
      return $quote->getPayment()->getId();
      }}


      How to do this.
      Thanks.










      share|improve this question














      I want to remove the below lines in MagentoQuoteModelPaymentMethodManagement model file



       if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
      throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
      }


      In PaymentMethodManagement file:



      <?php
      /**
      * Copyright © Magento, Inc. All rights reserved.
      * See COPYING.txt for license details.
      */
      namespace MagentoQuoteModel;

      use MagentoFrameworkExceptionStateInvalidTransitionException;

      /**
      * Class PaymentMethodManagement
      */
      class PaymentMethodManagement implements MagentoQuoteApiPaymentMethodManagementInterface
      {
      /**
      * @var MagentoQuoteApiCartRepositoryInterface
      */
      protected $quoteRepository;

      /**
      * @var MagentoPaymentModelChecksZeroTotal
      */
      protected $zeroTotalValidator;

      /**
      * @var MagentoPaymentModelMethodList
      */
      protected $methodList;

      /**
      * Constructor
      *
      * @param MagentoQuoteApiCartRepositoryInterface $quoteRepository
      * @param MagentoPaymentModelChecksZeroTotal $zeroTotalValidator
      * @param MagentoPaymentModelMethodList $methodList
      */
      public function __construct(
      MagentoQuoteApiCartRepositoryInterface $quoteRepository,
      MagentoPaymentModelChecksZeroTotal $zeroTotalValidator,
      MagentoPaymentModelMethodList $methodList
      ) {
      $this->quoteRepository = $quoteRepository;
      $this->zeroTotalValidator = $zeroTotalValidator;
      $this->methodList = $methodList;
      }

      /**
      * {@inheritdoc}
      */
      public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
      {
      /** @var MagentoQuoteModelQuote $quote */
      $quote = $this->quoteRepository->get($cartId);

      $method->setChecks([
      MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
      MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
      MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
      MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
      ]);
      $payment = $quote->getPayment();

      $data = $method->getData();
      $payment->importData($data);

      if ($quote->isVirtual()) {
      $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
      } else {
      // check if shipping address is set
      if ($quote->getShippingAddress()->getCountryId() === null) {
      throw new InvalidTransitionException(__('Shipping address is not set'));
      }
      $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
      }
      if (!$quote->isVirtual() && $quote->getShippingAddress()) {
      $quote->getShippingAddress()->setCollectShippingRates(true);
      }

      if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
      throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
      }

      $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
      return $quote->getPayment()->getId();
      }}


      How to do this.
      Thanks.







      magento2 php-7.2






      share|improve this question













      share|improve this question











      share|improve this question




      share|improve this question










      asked Apr 17 at 4:37









      Mano MMano M

      1,087219




      1,087219






















          4 Answers
          4






          active

          oldest

          votes


















          5














          Steps to Follow :




          • Override di.xml

          • Override PaymentMethodManagement.php

          • Launch SSH and Run Commands


          Override di.xml




          app/code/Namespace/Modulename/etc




          <?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="MagentoQuoteModelPaymentMethodManagement" type="NamespaceModulenamePaymentMethodManagement" />
          </config>


          Override PaymentMethodManagement.php



          /**
          * {@inheritdoc}
          */
          public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
          {
          /** @var MagentoQuoteModelQuote $quote */
          $quote = $this->quoteRepository->get($cartId);

          $method->setChecks([
          MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
          MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
          MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
          MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
          ]);
          $payment = $quote->getPayment();

          $data = $method->getData();
          $payment->importData($data);

          if ($quote->isVirtual()) {
          $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
          } else {
          // check if shipping address is set
          if ($quote->getShippingAddress()->getCountryId() === null) {
          throw new InvalidTransitionException(__('Shipping address is not set'));
          }
          $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
          }
          if (!$quote->isVirtual() && $quote->getShippingAddress()) {
          $quote->getShippingAddress()->setCollectShippingRates(true);
          }
          /*** Do stuff with this code ***/
          if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
          throw new InvalidTransitionException(__(''));
          }
          /*** Do stuff with this code ***/

          $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
          return $quote->getPayment()->getId();
          }


          Launch SSH and Run Commands



          php bin/magento setup:di:compile
          php bin/magento cache:clean
          php bin/magento cache:flush


          I hope it helps!






          share|improve this answer































            2














            You can do it by using Preference in your di.xml file of your custom module.



            <?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="MagentoQuoteModelPaymentMethodManagement" type="vendormoduleModelPaymentMethodManagement" />

            </config>





            share|improve this answer































              2














              in you etc/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="MagentoQuoteModelPaymentMethodManagement" type="VendorModuleModelRewriteQuotePaymentMethodManagement" />

              </config>


              in your Model file



              <?php 
              namespace VendorModuleModelRewriteQuote;

              class PaymentMethodManagement extends MagentoQuoteModelPaymentMethodManagement
              {
              public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
              {
              /** @var MagentoQuoteModelQuote $quote */
              $quote = $this->quoteRepository->get($cartId);

              $method->setChecks([
              MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
              MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
              MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
              MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
              ]);
              $payment = $quote->getPayment();

              $data = $method->getData();
              $payment->importData($data);

              if ($quote->isVirtual()) {
              $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
              } else {
              // check if shipping address is set
              if ($quote->getShippingAddress()->getCountryId() === null) {
              throw new InvalidTransitionException(__('Shipping address is not set'));
              }
              $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
              }
              if (!$quote->isVirtual() && $quote->getShippingAddress()) {
              $quote->getShippingAddress()->setCollectShippingRates(true);
              }
              /*** Do stuff with this code ***/
              if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
              throw new InvalidTransitionException(__(''));
              }
              /*** Do stuff with this code ***/

              $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
              return $quote->getPayment()->getId();
              }

              }





              share|improve this answer

































                1














                All above answers tell you how to rewrite the model, exactly what is asked. But Magento 2 offers another solution to your problem: Plugins. With plugins you can change the outcome of about any public method in Magento 2. You want to change the result of this function:



                if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
                }


                You can do this by adding a plugin on the MagentoPaymentModelChecksZeroTotal class. Add this to your etc/di.xml file:



                <type name="MagentoQuoteModelPaymentMethodManagement">
                <plugin name="your_unique_name_for_this_plugin" type="VendorModulePluginPaymentMethodManagement" />
                </type>


                Then create the file:



                Vendor/Module/Plugin/PaymentMethodManagement



                namespace Vendor/Module/Plugin;

                class PaymentMethodManagement {
                public function afterIsApplicable($subject, $result)
                {
                return true;
                }
                }


                This will make sure the function always returns true. If you want a more granular approach you can change the function to this:



                public function aroundIsApplicable($subject, callable $proceed, ...$args)
                {
                if ($this->meetsMyCustomRequirement()) {
                // This will call the original function and return it's results.
                return $proceed(...$args);
                }

                return false;
                }


                If the $proceed function isn't called then the original function is also never called.






                share|improve this answer
























                • This is the best solution. I always refer plugin for overriding the class

                  – Amit Bera
                  Apr 19 at 3:15












                Your Answer








                StackExchange.ready(function() {
                var channelOptions = {
                tags: "".split(" "),
                id: "479"
                };
                initTagRenderer("".split(" "), "".split(" "), channelOptions);

                StackExchange.using("externalEditor", function() {
                // Have to fire editor after snippets, if snippets enabled
                if (StackExchange.settings.snippets.snippetsEnabled) {
                StackExchange.using("snippets", function() {
                createEditor();
                });
                }
                else {
                createEditor();
                }
                });

                function createEditor() {
                StackExchange.prepareEditor({
                heartbeatType: 'answer',
                autoActivateHeartbeat: false,
                convertImagesToLinks: false,
                noModals: true,
                showLowRepImageUploadWarning: true,
                reputationToPostImages: null,
                bindNavPrevention: true,
                postfix: "",
                imageUploader: {
                brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
                contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
                allowUrls: true
                },
                onDemand: true,
                discardSelector: ".discard-answer"
                ,immediatelyShowMarkdownHelp:true
                });


                }
                });














                draft saved

                draft discarded


















                StackExchange.ready(
                function () {
                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f270381%2fhow-to-override-model-in-magento2%23new-answer', 'question_page');
                }
                );

                Post as a guest















                Required, but never shown

























                4 Answers
                4






                active

                oldest

                votes








                4 Answers
                4






                active

                oldest

                votes









                active

                oldest

                votes






                active

                oldest

                votes









                5














                Steps to Follow :




                • Override di.xml

                • Override PaymentMethodManagement.php

                • Launch SSH and Run Commands


                Override di.xml




                app/code/Namespace/Modulename/etc




                <?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="MagentoQuoteModelPaymentMethodManagement" type="NamespaceModulenamePaymentMethodManagement" />
                </config>


                Override PaymentMethodManagement.php



                /**
                * {@inheritdoc}
                */
                public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
                {
                /** @var MagentoQuoteModelQuote $quote */
                $quote = $this->quoteRepository->get($cartId);

                $method->setChecks([
                MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
                MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
                MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
                MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
                ]);
                $payment = $quote->getPayment();

                $data = $method->getData();
                $payment->importData($data);

                if ($quote->isVirtual()) {
                $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
                } else {
                // check if shipping address is set
                if ($quote->getShippingAddress()->getCountryId() === null) {
                throw new InvalidTransitionException(__('Shipping address is not set'));
                }
                $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
                }
                if (!$quote->isVirtual() && $quote->getShippingAddress()) {
                $quote->getShippingAddress()->setCollectShippingRates(true);
                }
                /*** Do stuff with this code ***/
                if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                throw new InvalidTransitionException(__(''));
                }
                /*** Do stuff with this code ***/

                $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
                return $quote->getPayment()->getId();
                }


                Launch SSH and Run Commands



                php bin/magento setup:di:compile
                php bin/magento cache:clean
                php bin/magento cache:flush


                I hope it helps!






                share|improve this answer




























                  5














                  Steps to Follow :




                  • Override di.xml

                  • Override PaymentMethodManagement.php

                  • Launch SSH and Run Commands


                  Override di.xml




                  app/code/Namespace/Modulename/etc




                  <?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="MagentoQuoteModelPaymentMethodManagement" type="NamespaceModulenamePaymentMethodManagement" />
                  </config>


                  Override PaymentMethodManagement.php



                  /**
                  * {@inheritdoc}
                  */
                  public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
                  {
                  /** @var MagentoQuoteModelQuote $quote */
                  $quote = $this->quoteRepository->get($cartId);

                  $method->setChecks([
                  MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
                  MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
                  MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
                  MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
                  ]);
                  $payment = $quote->getPayment();

                  $data = $method->getData();
                  $payment->importData($data);

                  if ($quote->isVirtual()) {
                  $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
                  } else {
                  // check if shipping address is set
                  if ($quote->getShippingAddress()->getCountryId() === null) {
                  throw new InvalidTransitionException(__('Shipping address is not set'));
                  }
                  $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
                  }
                  if (!$quote->isVirtual() && $quote->getShippingAddress()) {
                  $quote->getShippingAddress()->setCollectShippingRates(true);
                  }
                  /*** Do stuff with this code ***/
                  if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                  throw new InvalidTransitionException(__(''));
                  }
                  /*** Do stuff with this code ***/

                  $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
                  return $quote->getPayment()->getId();
                  }


                  Launch SSH and Run Commands



                  php bin/magento setup:di:compile
                  php bin/magento cache:clean
                  php bin/magento cache:flush


                  I hope it helps!






                  share|improve this answer


























                    5












                    5








                    5







                    Steps to Follow :




                    • Override di.xml

                    • Override PaymentMethodManagement.php

                    • Launch SSH and Run Commands


                    Override di.xml




                    app/code/Namespace/Modulename/etc




                    <?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="MagentoQuoteModelPaymentMethodManagement" type="NamespaceModulenamePaymentMethodManagement" />
                    </config>


                    Override PaymentMethodManagement.php



                    /**
                    * {@inheritdoc}
                    */
                    public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
                    {
                    /** @var MagentoQuoteModelQuote $quote */
                    $quote = $this->quoteRepository->get($cartId);

                    $method->setChecks([
                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
                    MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
                    ]);
                    $payment = $quote->getPayment();

                    $data = $method->getData();
                    $payment->importData($data);

                    if ($quote->isVirtual()) {
                    $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
                    } else {
                    // check if shipping address is set
                    if ($quote->getShippingAddress()->getCountryId() === null) {
                    throw new InvalidTransitionException(__('Shipping address is not set'));
                    }
                    $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
                    }
                    if (!$quote->isVirtual() && $quote->getShippingAddress()) {
                    $quote->getShippingAddress()->setCollectShippingRates(true);
                    }
                    /*** Do stuff with this code ***/
                    if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                    throw new InvalidTransitionException(__(''));
                    }
                    /*** Do stuff with this code ***/

                    $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
                    return $quote->getPayment()->getId();
                    }


                    Launch SSH and Run Commands



                    php bin/magento setup:di:compile
                    php bin/magento cache:clean
                    php bin/magento cache:flush


                    I hope it helps!






                    share|improve this answer













                    Steps to Follow :




                    • Override di.xml

                    • Override PaymentMethodManagement.php

                    • Launch SSH and Run Commands


                    Override di.xml




                    app/code/Namespace/Modulename/etc




                    <?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="MagentoQuoteModelPaymentMethodManagement" type="NamespaceModulenamePaymentMethodManagement" />
                    </config>


                    Override PaymentMethodManagement.php



                    /**
                    * {@inheritdoc}
                    */
                    public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
                    {
                    /** @var MagentoQuoteModelQuote $quote */
                    $quote = $this->quoteRepository->get($cartId);

                    $method->setChecks([
                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
                    MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
                    ]);
                    $payment = $quote->getPayment();

                    $data = $method->getData();
                    $payment->importData($data);

                    if ($quote->isVirtual()) {
                    $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
                    } else {
                    // check if shipping address is set
                    if ($quote->getShippingAddress()->getCountryId() === null) {
                    throw new InvalidTransitionException(__('Shipping address is not set'));
                    }
                    $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
                    }
                    if (!$quote->isVirtual() && $quote->getShippingAddress()) {
                    $quote->getShippingAddress()->setCollectShippingRates(true);
                    }
                    /*** Do stuff with this code ***/
                    if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                    throw new InvalidTransitionException(__(''));
                    }
                    /*** Do stuff with this code ***/

                    $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
                    return $quote->getPayment()->getId();
                    }


                    Launch SSH and Run Commands



                    php bin/magento setup:di:compile
                    php bin/magento cache:clean
                    php bin/magento cache:flush


                    I hope it helps!







                    share|improve this answer












                    share|improve this answer



                    share|improve this answer










                    answered Apr 17 at 4:49









                    Chirag PatelChirag Patel

                    2,648423




                    2,648423

























                        2














                        You can do it by using Preference in your di.xml file of your custom module.



                        <?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="MagentoQuoteModelPaymentMethodManagement" type="vendormoduleModelPaymentMethodManagement" />

                        </config>





                        share|improve this answer




























                          2














                          You can do it by using Preference in your di.xml file of your custom module.



                          <?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="MagentoQuoteModelPaymentMethodManagement" type="vendormoduleModelPaymentMethodManagement" />

                          </config>





                          share|improve this answer


























                            2












                            2








                            2







                            You can do it by using Preference in your di.xml file of your custom module.



                            <?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="MagentoQuoteModelPaymentMethodManagement" type="vendormoduleModelPaymentMethodManagement" />

                            </config>





                            share|improve this answer













                            You can do it by using Preference in your di.xml file of your custom module.



                            <?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="MagentoQuoteModelPaymentMethodManagement" type="vendormoduleModelPaymentMethodManagement" />

                            </config>






                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Apr 17 at 4:47









                            magefmsmagefms

                            2,8052528




                            2,8052528























                                2














                                in you etc/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="MagentoQuoteModelPaymentMethodManagement" type="VendorModuleModelRewriteQuotePaymentMethodManagement" />

                                </config>


                                in your Model file



                                <?php 
                                namespace VendorModuleModelRewriteQuote;

                                class PaymentMethodManagement extends MagentoQuoteModelPaymentMethodManagement
                                {
                                public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
                                {
                                /** @var MagentoQuoteModelQuote $quote */
                                $quote = $this->quoteRepository->get($cartId);

                                $method->setChecks([
                                MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
                                MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
                                MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
                                MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
                                ]);
                                $payment = $quote->getPayment();

                                $data = $method->getData();
                                $payment->importData($data);

                                if ($quote->isVirtual()) {
                                $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
                                } else {
                                // check if shipping address is set
                                if ($quote->getShippingAddress()->getCountryId() === null) {
                                throw new InvalidTransitionException(__('Shipping address is not set'));
                                }
                                $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
                                }
                                if (!$quote->isVirtual() && $quote->getShippingAddress()) {
                                $quote->getShippingAddress()->setCollectShippingRates(true);
                                }
                                /*** Do stuff with this code ***/
                                if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                                throw new InvalidTransitionException(__(''));
                                }
                                /*** Do stuff with this code ***/

                                $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
                                return $quote->getPayment()->getId();
                                }

                                }





                                share|improve this answer






























                                  2














                                  in you etc/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="MagentoQuoteModelPaymentMethodManagement" type="VendorModuleModelRewriteQuotePaymentMethodManagement" />

                                  </config>


                                  in your Model file



                                  <?php 
                                  namespace VendorModuleModelRewriteQuote;

                                  class PaymentMethodManagement extends MagentoQuoteModelPaymentMethodManagement
                                  {
                                  public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
                                  {
                                  /** @var MagentoQuoteModelQuote $quote */
                                  $quote = $this->quoteRepository->get($cartId);

                                  $method->setChecks([
                                  MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
                                  MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
                                  MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
                                  MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
                                  ]);
                                  $payment = $quote->getPayment();

                                  $data = $method->getData();
                                  $payment->importData($data);

                                  if ($quote->isVirtual()) {
                                  $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
                                  } else {
                                  // check if shipping address is set
                                  if ($quote->getShippingAddress()->getCountryId() === null) {
                                  throw new InvalidTransitionException(__('Shipping address is not set'));
                                  }
                                  $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
                                  }
                                  if (!$quote->isVirtual() && $quote->getShippingAddress()) {
                                  $quote->getShippingAddress()->setCollectShippingRates(true);
                                  }
                                  /*** Do stuff with this code ***/
                                  if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                                  throw new InvalidTransitionException(__(''));
                                  }
                                  /*** Do stuff with this code ***/

                                  $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
                                  return $quote->getPayment()->getId();
                                  }

                                  }





                                  share|improve this answer




























                                    2












                                    2








                                    2







                                    in you etc/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="MagentoQuoteModelPaymentMethodManagement" type="VendorModuleModelRewriteQuotePaymentMethodManagement" />

                                    </config>


                                    in your Model file



                                    <?php 
                                    namespace VendorModuleModelRewriteQuote;

                                    class PaymentMethodManagement extends MagentoQuoteModelPaymentMethodManagement
                                    {
                                    public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
                                    {
                                    /** @var MagentoQuoteModelQuote $quote */
                                    $quote = $this->quoteRepository->get($cartId);

                                    $method->setChecks([
                                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
                                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
                                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
                                    MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
                                    ]);
                                    $payment = $quote->getPayment();

                                    $data = $method->getData();
                                    $payment->importData($data);

                                    if ($quote->isVirtual()) {
                                    $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
                                    } else {
                                    // check if shipping address is set
                                    if ($quote->getShippingAddress()->getCountryId() === null) {
                                    throw new InvalidTransitionException(__('Shipping address is not set'));
                                    }
                                    $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
                                    }
                                    if (!$quote->isVirtual() && $quote->getShippingAddress()) {
                                    $quote->getShippingAddress()->setCollectShippingRates(true);
                                    }
                                    /*** Do stuff with this code ***/
                                    if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                                    throw new InvalidTransitionException(__(''));
                                    }
                                    /*** Do stuff with this code ***/

                                    $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
                                    return $quote->getPayment()->getId();
                                    }

                                    }





                                    share|improve this answer















                                    in you etc/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="MagentoQuoteModelPaymentMethodManagement" type="VendorModuleModelRewriteQuotePaymentMethodManagement" />

                                    </config>


                                    in your Model file



                                    <?php 
                                    namespace VendorModuleModelRewriteQuote;

                                    class PaymentMethodManagement extends MagentoQuoteModelPaymentMethodManagement
                                    {
                                    public function set($cartId, MagentoQuoteApiDataPaymentInterface $method)
                                    {
                                    /** @var MagentoQuoteModelQuote $quote */
                                    $quote = $this->quoteRepository->get($cartId);

                                    $method->setChecks([
                                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_CHECKOUT,
                                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_COUNTRY,
                                    MagentoPaymentModelMethodAbstractMethod::CHECK_USE_FOR_CURRENCY,
                                    MagentoPaymentModelMethodAbstractMethod::CHECK_ORDER_TOTAL_MIN_MAX,
                                    ]);
                                    $payment = $quote->getPayment();

                                    $data = $method->getData();
                                    $payment->importData($data);

                                    if ($quote->isVirtual()) {
                                    $quote->getBillingAddress()->setPaymentMethod($payment->getMethod());
                                    } else {
                                    // check if shipping address is set
                                    if ($quote->getShippingAddress()->getCountryId() === null) {
                                    throw new InvalidTransitionException(__('Shipping address is not set'));
                                    }
                                    $quote->getShippingAddress()->setPaymentMethod($payment->getMethod());
                                    }
                                    if (!$quote->isVirtual() && $quote->getShippingAddress()) {
                                    $quote->getShippingAddress()->setCollectShippingRates(true);
                                    }
                                    /*** Do stuff with this code ***/
                                    if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                                    throw new InvalidTransitionException(__(''));
                                    }
                                    /*** Do stuff with this code ***/

                                    $quote->setTotalsCollectedFlag(false)->collectTotals()->save();
                                    return $quote->getPayment()->getId();
                                    }

                                    }






                                    share|improve this answer














                                    share|improve this answer



                                    share|improve this answer








                                    edited Apr 17 at 4:55

























                                    answered Apr 17 at 4:47









                                    Rakesh DongaRakesh Donga

                                    2,679317




                                    2,679317























                                        1














                                        All above answers tell you how to rewrite the model, exactly what is asked. But Magento 2 offers another solution to your problem: Plugins. With plugins you can change the outcome of about any public method in Magento 2. You want to change the result of this function:



                                        if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                                        throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
                                        }


                                        You can do this by adding a plugin on the MagentoPaymentModelChecksZeroTotal class. Add this to your etc/di.xml file:



                                        <type name="MagentoQuoteModelPaymentMethodManagement">
                                        <plugin name="your_unique_name_for_this_plugin" type="VendorModulePluginPaymentMethodManagement" />
                                        </type>


                                        Then create the file:



                                        Vendor/Module/Plugin/PaymentMethodManagement



                                        namespace Vendor/Module/Plugin;

                                        class PaymentMethodManagement {
                                        public function afterIsApplicable($subject, $result)
                                        {
                                        return true;
                                        }
                                        }


                                        This will make sure the function always returns true. If you want a more granular approach you can change the function to this:



                                        public function aroundIsApplicable($subject, callable $proceed, ...$args)
                                        {
                                        if ($this->meetsMyCustomRequirement()) {
                                        // This will call the original function and return it's results.
                                        return $proceed(...$args);
                                        }

                                        return false;
                                        }


                                        If the $proceed function isn't called then the original function is also never called.






                                        share|improve this answer
























                                        • This is the best solution. I always refer plugin for overriding the class

                                          – Amit Bera
                                          Apr 19 at 3:15
















                                        1














                                        All above answers tell you how to rewrite the model, exactly what is asked. But Magento 2 offers another solution to your problem: Plugins. With plugins you can change the outcome of about any public method in Magento 2. You want to change the result of this function:



                                        if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                                        throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
                                        }


                                        You can do this by adding a plugin on the MagentoPaymentModelChecksZeroTotal class. Add this to your etc/di.xml file:



                                        <type name="MagentoQuoteModelPaymentMethodManagement">
                                        <plugin name="your_unique_name_for_this_plugin" type="VendorModulePluginPaymentMethodManagement" />
                                        </type>


                                        Then create the file:



                                        Vendor/Module/Plugin/PaymentMethodManagement



                                        namespace Vendor/Module/Plugin;

                                        class PaymentMethodManagement {
                                        public function afterIsApplicable($subject, $result)
                                        {
                                        return true;
                                        }
                                        }


                                        This will make sure the function always returns true. If you want a more granular approach you can change the function to this:



                                        public function aroundIsApplicable($subject, callable $proceed, ...$args)
                                        {
                                        if ($this->meetsMyCustomRequirement()) {
                                        // This will call the original function and return it's results.
                                        return $proceed(...$args);
                                        }

                                        return false;
                                        }


                                        If the $proceed function isn't called then the original function is also never called.






                                        share|improve this answer
























                                        • This is the best solution. I always refer plugin for overriding the class

                                          – Amit Bera
                                          Apr 19 at 3:15














                                        1












                                        1








                                        1







                                        All above answers tell you how to rewrite the model, exactly what is asked. But Magento 2 offers another solution to your problem: Plugins. With plugins you can change the outcome of about any public method in Magento 2. You want to change the result of this function:



                                        if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                                        throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
                                        }


                                        You can do this by adding a plugin on the MagentoPaymentModelChecksZeroTotal class. Add this to your etc/di.xml file:



                                        <type name="MagentoQuoteModelPaymentMethodManagement">
                                        <plugin name="your_unique_name_for_this_plugin" type="VendorModulePluginPaymentMethodManagement" />
                                        </type>


                                        Then create the file:



                                        Vendor/Module/Plugin/PaymentMethodManagement



                                        namespace Vendor/Module/Plugin;

                                        class PaymentMethodManagement {
                                        public function afterIsApplicable($subject, $result)
                                        {
                                        return true;
                                        }
                                        }


                                        This will make sure the function always returns true. If you want a more granular approach you can change the function to this:



                                        public function aroundIsApplicable($subject, callable $proceed, ...$args)
                                        {
                                        if ($this->meetsMyCustomRequirement()) {
                                        // This will call the original function and return it's results.
                                        return $proceed(...$args);
                                        }

                                        return false;
                                        }


                                        If the $proceed function isn't called then the original function is also never called.






                                        share|improve this answer













                                        All above answers tell you how to rewrite the model, exactly what is asked. But Magento 2 offers another solution to your problem: Plugins. With plugins you can change the outcome of about any public method in Magento 2. You want to change the result of this function:



                                        if (!$this->zeroTotalValidator->isApplicable($payment->getMethodInstance(), $quote)) {
                                        throw new InvalidTransitionException(__('The requested Payment Method is not available.'));
                                        }


                                        You can do this by adding a plugin on the MagentoPaymentModelChecksZeroTotal class. Add this to your etc/di.xml file:



                                        <type name="MagentoQuoteModelPaymentMethodManagement">
                                        <plugin name="your_unique_name_for_this_plugin" type="VendorModulePluginPaymentMethodManagement" />
                                        </type>


                                        Then create the file:



                                        Vendor/Module/Plugin/PaymentMethodManagement



                                        namespace Vendor/Module/Plugin;

                                        class PaymentMethodManagement {
                                        public function afterIsApplicable($subject, $result)
                                        {
                                        return true;
                                        }
                                        }


                                        This will make sure the function always returns true. If you want a more granular approach you can change the function to this:



                                        public function aroundIsApplicable($subject, callable $proceed, ...$args)
                                        {
                                        if ($this->meetsMyCustomRequirement()) {
                                        // This will call the original function and return it's results.
                                        return $proceed(...$args);
                                        }

                                        return false;
                                        }


                                        If the $proceed function isn't called then the original function is also never called.







                                        share|improve this answer












                                        share|improve this answer



                                        share|improve this answer










                                        answered Apr 17 at 11:02









                                        MichielMichiel

                                        1584




                                        1584













                                        • This is the best solution. I always refer plugin for overriding the class

                                          – Amit Bera
                                          Apr 19 at 3:15



















                                        • This is the best solution. I always refer plugin for overriding the class

                                          – Amit Bera
                                          Apr 19 at 3:15

















                                        This is the best solution. I always refer plugin for overriding the class

                                        – Amit Bera
                                        Apr 19 at 3:15





                                        This is the best solution. I always refer plugin for overriding the class

                                        – Amit Bera
                                        Apr 19 at 3:15


















                                        draft saved

                                        draft discarded




















































                                        Thanks for contributing an answer to Magento Stack Exchange!


                                        • Please be sure to answer the question. Provide details and share your research!

                                        But avoid



                                        • Asking for help, clarification, or responding to other answers.

                                        • Making statements based on opinion; back them up with references or personal experience.


                                        To learn more, see our tips on writing great answers.




                                        draft saved


                                        draft discarded














                                        StackExchange.ready(
                                        function () {
                                        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fmagento.stackexchange.com%2fquestions%2f270381%2fhow-to-override-model-in-magento2%23new-answer', 'question_page');
                                        }
                                        );

                                        Post as a guest















                                        Required, but never shown





















































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown

































                                        Required, but never shown














                                        Required, but never shown












                                        Required, but never shown







                                        Required, but never shown







                                        Popular posts from this blog

                                        Plaza Victoria

                                        Puebla de Zaragoza

                                        Musa