Skip to content
This repository has been archived by the owner on Nov 1, 2022. It is now read-only.

Enable constructing DTOs *without* passing parameter array. #68

Merged
merged 1 commit into from Oct 16, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
4 changes: 2 additions & 2 deletions src/DataTransferObject.php
Expand Up @@ -20,12 +20,12 @@ abstract class DataTransferObject
*
* @return \Spatie\DataTransferObject\ImmutableDataTransferObject|static
*/
public static function immutable(array $parameters): ImmutableDataTransferObject
public static function immutable(array $parameters = []): ImmutableDataTransferObject
{
return new ImmutableDataTransferObject(new static($parameters));
}

public function __construct(array $parameters)
public function __construct(array $parameters = [])
{
$class = new ReflectionClass(static::class);

Expand Down
Expand Up @@ -369,4 +369,18 @@ public function empty_dto_objects_can_be_cast_using_arrays()

$this->assertInstanceOf(EmptyChild::class, $object->child);
}

/** @test */
public function empty_constructor_is_supported()
{
$valueObject = new class() extends DataTransferObject {
/** @var string */
public $foo = 'abc';

/** @var bool|null */
public $bar;
};

$this->assertEquals(['foo' => 'abc', 'bar' => null], $valueObject->all());
}
}
9 changes: 9 additions & 0 deletions tests/ImmutableTest.php
Expand Up @@ -4,6 +4,7 @@

use Spatie\DataTransferObject\DataTransferObjectError;
use Spatie\DataTransferObject\Tests\TestClasses\TestDataTransferObject;
use Spatie\DataTransferObject\Tests\TestClasses\NullableTestDataTransferObject;

class ImmutableTest extends TestCase
{
Expand All @@ -30,4 +31,12 @@ public function method_calls_are_proxied()

$this->assertEquals(['testProperty' => 1], $dto->toArray());
}

/** @test */
public function passing_parameters_is_not_required()
{
$dto = NullableTestDataTransferObject::immutable();

$this->assertEquals(['foo' => 'abc', 'bar' => null], $dto->toArray());
}
}
16 changes: 16 additions & 0 deletions tests/TestClasses/NullableTestDataTransferObject.php
@@ -0,0 +1,16 @@
<?php

declare(strict_types=1);

namespace Spatie\DataTransferObject\Tests\TestClasses;

use Spatie\DataTransferObject\DataTransferObject;

class NullableTestDataTransferObject extends DataTransferObject
{
/** @var string */
public $foo = 'abc';

/** @var bool|null */
public $bar;
}