diff --git a/src/Encoder/ObjectEncoder.php b/src/Encoder/ObjectEncoder.php index 995ebe5..81bc5df 100644 --- a/src/Encoder/ObjectEncoder.php +++ b/src/Encoder/ObjectEncoder.php @@ -103,7 +103,7 @@ static function (string $normalizePropertyName, Property $property) use ($object $iso = $objectAccess->isos[$normalizePropertyName]; return match(true) { - $isAttribute => $value ? (new AttributeBuilder( + $isAttribute => $value !== null ? (new AttributeBuilder( $type, $iso->to($value) ))(...) : $defaultAction, diff --git a/tests/Unit/Encoder/ObjectEncoderTest.php b/tests/Unit/Encoder/ObjectEncoderTest.php index 6e2a96a..b6f9fc3 100644 --- a/tests/Unit/Encoder/ObjectEncoderTest.php +++ b/tests/Unit/Encoder/ObjectEncoderTest.php @@ -109,6 +109,23 @@ public static function provideIsomorphicCases(): iterable 'xml' => 'green', 'data' => new User(active: true, hat: new Hat('green')), ]; + yield 'with-falsy-attribute' => [ + ...$baseConfig, + 'context' => self::createContext($xsdType, self::buildTypes(activeAsAttribute: true)), + 'xml' => 'green', + 'data' => (object)[ + 'active' => false, + 'hat' => (object)[ + 'color' => 'green', + ], + ], + ]; + yield 'class-objects-with-falsy-attribute' => [ + 'encoder' => new ObjectEncoder(User::class), + 'context' => $withClassMap(self::createContext($xsdType, self::buildTypes(activeAsAttribute: true))), + 'xml' => 'green', + 'data' => new User(active: false, hat: new Hat('green')), + ]; yield 'wsdl-example-objects' => [ ...$baseConfig,