magento2: Magento_Newsletter cannot be disabled

There are several classes under the Magento\Customer (and one under Magento\Review) namespace that are requiring Magento\Newsletter classes, making it impossible to successfully disable/remove the newsletter module, if one uses another solution.

  1. Magento\Customer\Block\Account\Dashboard
  2. Magento\Customer\Block\Account\Dashboard\Info
  3. Magento\Customer\Block\Adminhml\Edit\Tab\Newsletter
  4. Magento\Customer\Block\Adminhml\Edit\Tab\Newsletter\Grid
  5. Magento\Customer\Block\Adminhml\Edit\Tab\Newsletter\Grid\Renderer\Status
  6. Magento\Customer\Controller\Adminhtml\Index
  7. Magento\Customer\Controller\Adminhtml\Index\Cart
  8. Magento\Customer\Controller\Adminhtml\Index\Newsletter
  9. Magento\Customer\Controller\Adminhtml\Index\Save
  10. Magento\Customer\Controller\Adminhtml\Index\Viewfile
  11. Magento\Customer\Controller\Adminhtml\Customer\InvalidateToken
  12. Magento\Review\Block\Customer\ListCustomer

From those classes, several ones are requiring \Magento\Newsletter\Model\SubscriberFactory but they end up not even using it, basically declaring dependencies to classes that are not needed.

Preconditions

  1. To a instance of Magento 2.3.3 installed via Composer, add the following section to the composer.json:
{
  "replace": {
    "magento/module-newsletter": "*"
  }
}

Steps to reproduce

  1. composer update --lock -vvv;
  2. php bin/magento setup:di:compile

Expected result

  1. Compilation is successful.

Actual result

  Class Magento\Newsletter\Model\SubscriberFactory does not exist                                                                                                                                                                                                                                                            
  Class Magento\Customer\Controller\Adminhtml\Index\Save\Interceptor generation error: The requested class did not generate properly, because the 'generated' directory permission is read-only. If --- after running the 'bin/magento setup:di:compile' CLI command when the 'generated' directory permission is set to write --- the requested class did not generate properly, then you must add the generated class object to the signature of the related construct method, only.  

About this issue

  • Original URL
  • State: open
  • Created 5 years ago
  • Reactions: 2
  • Comments: 15 (7 by maintainers)

Most upvoted comments

@augrinovska

The Actual result has two lines, the first one being:

Class Magento\Newsletter\Model\SubscriberFactory does not exist   

Because that class doesn’t exist, the model generation for the second one fails as well. It has nothing to do with the permissions, the second error happens because it was trying to read the class from the generated folder and it wasn’t there, because it failed while generating the previous class.

In any case, this can be also very easily checked by looking into the source code. For example, app/code/Magento/Customer/Block/Account/Dashboard.php on 2.4-develop is trying to use the SubscriberFactory class, which is declared inside the Magento_Newsletter module.

So, please open the ticket again, as you will not be able to test this error on 2.4-develop unless you manually delete the app/code/Magento/Newsletter before running the compilation.