NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
Packagist · #1872 most downloaded on Packagist
A general purpose SoapClient library
Last release 4 months ago
29 May 2026
Release timing varies
gaps range from 2 weeks to 7 months
Rarely documented
notes for 8 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
11 years old
92 releases · first in 2015
Sync console application version & add release Makefile by @veewee in #612
Full Changelog: 6.1.0...6.2.0
GenConfigCommand - print wsdl loading exceptions when output is verbose by @YasserB94 in #610
Full Changelog: 6.0.0...6.0.1
One column per quarter.
PHP 8.4 is now the minimum required version (PHP 8.3 support dropped)
php-standard-library/php-standard-library with standalone packages (^6.1)| Package | v5 | v6 |
|---|---|---|
| php | ~8.3.0 || ~8.4.0 || ~8.5.0 | ~8.4.0 || ~8.5.0 |
| php-standard-library | monolithic ^3-6 | standalone packages ^6.1 |
| php-soap/cached-engine | ~0.6 | ~0.8 |
| php-soap/encoding | ~0.28 | ~0.32 |
| php-soap/engine | ^2.19 | ^2.20 |
| php-soap/psr18-transport | ^1.7 | ^2.0 |
| php-soap/wsdl-reader | ~0.31 | ~0.32 |
PHP 8.3 is no longer supported. Upgrade to PHP 8.4+ before updating.
The biggest user-facing change. All DOM types migrated to PHP 8.4's modern DOM API:
DOMDocument -> Dom\XMLDocumentDOMElement -> Dom\ElementDOMNode -> Dom\NodeIf you wrote custom middleware or manipulators that touch DOM objects, you need to update:
// Before (v5):
use Soap\Psr18Transport\Xml\XmlMessageManipulator;
$manipulator = new XmlMessageManipulator(function (\DOMDocument $dom): void {
// ...
});
// After (v6):
$manipulator = new XmlMessageManipulator(function (\Dom\XMLDocument $dom): void {
// ...
});// Before (v5):
$middleware = new SoapHeaderMiddleware(fn(\DOMNode $node): \DOMElement => /* ... */);
// After (v6):
$middleware = new SoapHeaderMiddleware(fn(\Dom\Node $node): \Dom\Element => /* ... */);Element::fromDOMElement() and Element::element() now accept/return Dom\Element instead of DOMElementDom\ namespace equivalentsnull for missing values (previously empty strings)The monolithic php-standard-library/php-standard-library has been replaced with standalone packages:
php-standard-library/dict
php-standard-library/foundation
php-standard-library/iter
php-standard-library/option
php-standard-library/result
php-standard-library/str
php-standard-library/type
php-standard-library/vec
This should not affect end users unless you depend on PSL classes being available transitively.
composer.json: composer require phpro/soap-client:^6.0DOMDocument, DOMElement, DOMNode usage in SOAP middleware/manipulators and migrate to Dom\XMLDocument, Dom\Element, Dom\NodeElement::fromDOMElement() callsFull Changelog: 5.0.0...6.0.0
V5 overhauls the code generation configuration system with proper value objects, introduces XML namespace-aware type mapping, customizable coding stan
V5 overhauls the code generation configuration system with proper value objects, introduces XML namespace-aware type mapping, customizable coding standards, and improved default value handling for generated code.
composer require 'phpro/soap-client:^5.0.0-beta1@beta' --update-with-dependenciesYou'll need to update your code generation configuration file.
For a step-by-step plan, you can follow the instructions at:
https://github.com/phpro/soap-client/blob/v5.x/UPGRADING.md#v4-to-v5
The Config class no longer uses individual string setters. Instead, dedicated value objects — Destination, ClientConfig, ClassMapConfig, and TypeNamespaceMap — replace the old setTypeNamespace(), setTypeDestination(), setClientName(), etc. methods. The ConfigInterface has been removed.
A new TypeNamespaceMap allows you to map XML namespaces (xmlns) to specific PHP namespace destinations. This is useful when a WSDL defines types across multiple XML namespaces and you want to organize them into separate directories.
You can use explicit withMapping() calls, a built-in PrefixBasedTypeNamespaceStrategy for automatic resolution, or combine both. The generate:config command now detects xmlns namespaces from your WSDL and suggests mappings in the generated config.
Duplicate type strategies (IntersectDuplicateTypesStrategy and RemoveDuplicateTypesStrategy) are now namespace-aware — types that map to different PHP namespaces are no longer considered duplicates.
A new CodingStandardsStrategyInterface lets you customize naming conventions for all generated code. By default, DefaultCodingStandardsStrategy is used, which matches existing behavior — no changes required for existing users.
Configure it via Config::setCodingStandards(). Context classes (TypeContext, PropertyContext, ClientMethodContext, ClassMapContext) now require CodeGeneratorContext as an additional constructor parameter. Property gains new convenience methods methodName() and parameterName() that use the configured coding standards.
The old PropertyDefaultsAssembler has been removed. Its functionality is now built into PropertyAssembler and ConstructorAssembler via a new DefaultValuesStrategy enum:
OptionalOnly (new default) — Only nullable/optional properties get = nullAll (previous default) — All scalars get zero-value defaultsNone — No defaults appliedFull Changelog: 4.6.0...5.0.0
feat: add support for azjezz/psl@5.0 by @EJTJ3 in #603
Full Changelog: 5.0.0-beta1...5.0.0-beta2
❗ This pre-release is experimental ❗
V5 overhauls the code generation configuration system with proper value objects, introduces XML namespace-aware type mapping, customizable coding standards, and improved default value handling for generated code.
We decided to pre-launch at this point in order to get some feedback from you.
Feel free to play around with it and give us feedback!
composer require 'phpro/soap-client:^5.0.0-beta1@beta' --update-with-dependenciesYou'll need to update your code generation configuration file.
For a step-by-step plan, you can follow the instructions at:
https://github.com/phpro/soap-client/blob/v5.x/UPGRADING.md#v4-to-v5
The Config class no longer uses individual string setters. Instead, dedicated value objects — Destination, ClientConfig, ClassMapConfig, and TypeNamespaceMap — replace the old setTypeNamespace(), setTypeDestination(), setClientName(), etc. methods. The ConfigInterface has been removed.
A new TypeNamespaceMap allows you to map XML namespaces (xmlns) to specific PHP namespace destinations. This is useful when a WSDL defines types across multiple XML namespaces and you want to organize them into separate directories.
You can use explicit withMapping() calls, a built-in PrefixBasedTypeNamespaceStrategy for automatic resolution, or combine both. The generate:config command now detects xmlns namespaces from your WSDL and suggests mappings in the generated config.
Duplicate type strategies (IntersectDuplicateTypesStrategy and RemoveDuplicateTypesStrategy) are now namespace-aware — types that map to different PHP namespaces are no longer considered duplicates.
A new CodingStandardsStrategyInterface lets you customize naming conventions for all generated code. By default, DefaultCodingStandardsStrategy is used, which matches existing behavior — no changes required for existing users.
Configure it via Config::setCodingStandards(). Context classes (TypeContext, PropertyContext, ClientMethodContext, ClassMapContext) now require CodeGeneratorContext as an additional constructor parameter. Property gains new convenience methods methodName() and parameterName() that use the configured coding standards.
The old PropertyDefaultsAssembler has been removed. Its functionality is now built into PropertyAssembler and ConstructorAssembler via a new DefaultValuesStrategy enum:
OptionalOnly (new default) — Only nullable/optional properties get = nullAll (previous default) — All scalars get zero-value defaultsNone — No defaults appliedFull Changelog: 4.6.0...5.0.0-beta1
feat: replace azjezz/psl with php-standard-library/php-standard-library by @veewee in #606
Full Changelog: 4.7.0...4.8.0
feat: add support for azjezz/psl@5.0 by @EJTJ3 in #603
feat: add support for symfony 8 by @EJTJ3 in #600
Update ClientConstructorAssembler to use type instead of phpdoc by @ayrtonandino in #595
Full Changelog: 4.4.1...4.5.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →