I have few extensions which is using "Zend_Http_Client". It is working with Magento ver. 2.4.5. but in Magento 2.4.6, it says "Error: Class "Zend_Http_Client" not found".
6 Answers
As Zend usage deprecated since 2.4.6, Now you can use Laminas instead.
Replace
Zend_Http_Client
with\Laminas\Http\Request
(Replace constants from GET toMETHOD_GET
, POST toMETHOD_POST
)For example:
\Zend_Http_Client::POST
will be\Laminas\Http\Request::METHOD_POST
and\Zend_Http_Client::GET
will be\Laminas\Http\Request::METHOD_GET
Replace
Zend_Json
with\Laminas\Json\Json
Make sure that you have installed
- laminas/laminas-http
- laminas/laminas-serializer
More information can be found here: https://developer-stage.adobe.com/commerce/php/development/backward-incompatible-changes/highlights/?utm_source=store&utm_medium=blog&utm_campaign=2023-02-magento-2-4-6
You can resolve this (for the time being) by adding magento/zendframework1 back into your build.
composer require magento/zendframework1
Then do a full clean and it should all work again.
-
1If I could give 1000 points right now I would. Thank you. I wonder why Magento didn't advertise this very easy workaround, than to wait the module developers to provide the adapted releases without Zend_* dependencies. Commented Mar 31, 2023 at 17:58
-
1
-
2Don't use deprecated framework. It's bad idea, guys Commented Jul 20, 2023 at 13:00
Zend framework (ZF1) components that have reached end of life have been removed from the codebase. See Backward-incompatible changes highlights.
Zend has been replaced by Laminas. Be sure ton include laminas/laminas-serializer in composer.json
You need to install laminas/laminas-serializer via composer
composer require laminas/laminas-serializer
and then replace Zend classes with respective Laminas classes from your code inside vndor directory and app/code and all other occurences.
Follow this article for more details: https://meetanshi.com/blog/solved-class-zend-not-found-in-magento-2/
There are official docs with official suggestions (with examples):
Zend_HTTP replaced with laminas-http
https://developer.adobe.com/commerce/php/development/backward-incompatible-changes/highlights/#zend_http-replaced-with-laminas-http
Zend_Validate replaced with laminas-validator
https://developer.adobe.com/commerce/php/development/backward-incompatible-changes/highlights/#zend_validate-replaced-with-laminas-validator
Replace Zend_Http_Client
class:
In your case you can use \Magento\Framework\HTTP\LaminasClient
instead of ancient Zend_Http_Client
Another idea:
Try to avoid direct usage of 3d-party classes like Zend
or Laminas
. In Magento we should use Adapters
- as a Magento best practice