Classnames 'Void' inside vendor/magento/
-
01-10-2020 - |
Question
I'm trying to re-compile using
php bin/magento setup:di:compile
But when I run this command, I get:
Fatal error: Cannot use 'Void' as class name as it is reserved in /var/www/html/magento/vendor/magento/module-sales/Controller/Adminhtml/Order/Invoice/Void.php on line 9
I am running PHP 7.1.0-alpha.
Solution
I don't think Magento 2 is yet compatible with php 7.1-alpha, but this is an alarm signal.
I think you should report this on github.
It could be an issue in the near future,
OTHER TIPS
Here is how to fix it:
edit
vendor/magento/module-sales/etc/webapi.xml
line 112:- <route url="/V1/invoices/:id/void" method="POST"> + <route url="/V1/invoices/:id/voidInvoice" method="POST">
edit
vendor/magento/module-sales/Block/Adminhtml/Order/Invoice/View.php
line 242:- return $this->getUrl('sales/*/void', ['invoice_id' => $this->getInvoice()->getId()]); + return $this->getUrl('sales/*/voidInvoice', ['invoice_id' => $this->getInvoice()->getId()]);
edit
vendor/magento/module-sales/Block/Adminhtml/Order/Creditmemo/View.php
line 183:- return $this->getUrl('sales/*/void', ['creditmemo_id' => $this->getCreditmemo()->getId()]); + return $this->getUrl('sales/*/voidCreditmemo', ['creditmemo_id' => $this->getCreditmemo()->getId()]);
edit
vendor/magento/module-sales/Controller/Adminhtml/Order/Invoice/Void.php
line 9:- class Void extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\View + class VoidInvoice extends \Magento\Sales\Controller\Adminhtml\Invoice\AbstractInvoice\View
edit
vendor/magento/module-sales/Controller/Adminhtml/Order/Creditmemo/Void.php
line 10:- class Void extends \Magento\Backend\App\Action + class VoidCreditmemo extends \Magento\Backend\App\Action
rename
vendor/magento/module-sales/Controller/Adminhtml/Order/Creditmemo/Void.php
to
vendor/magento/module-sales/Controller/Adminhtml/Order/Creditmemo/VoidCreditmemo.php
rename
vendor/magento/module-sales/Controller/Adminhtml/Order/Invoice/Void.php
to
vendor/magento/module-sales/Controller/Adminhtml/Order/Invoice/VoidInvoice.php
taken from https://mage2.pro/t/topic/2433/2
Instead of modifying the core magento vendor files to resolve the issue it would make more sense to use the right php version. Depending on what you are using, it should be easy enough to set a BASH configuration for a particular php bin location.
This is no longer an issue for Magento 2.2 - Magento 2.1 was not PHP7.1 compatible.