nette / schema

📐 Validating data structures against a given Schema.
https://doc.nette.org/schema
Other
905 stars 26 forks source link

Validator from class #46

Closed jtojnar closed 1 year ago

jtojnar commented 2 years ago

The Expect::from is nice, but it does not really work for immutable objects like the following:

<?php

use Money\Money;

final class InvoiceItem {
    public function __construct(
        public readonly string $name,
        public readonly Money $price,
        public readonly int $amount,
    ) {
    }
}
Version without readonly ```php name; } public function getPrice(): Money { return $this->price; } public function getAmount(): int { return $this->amount; } } ```

It would be nice to have Expect::fromClass(InvoiceItem::class), that would check the constructor arguments instead of the public properties like Expect::from does.

I can try to implement this, if you think this is a good idea.

jtojnar commented 2 years ago

Actually, I am not sure if argument names are considered a part of the public API. But with PHP 8’s support for named parameters, they probably should be anyway.

Edit: Looks like it is indeed the case and some projects are using @no-named-arguments as an annotation to disable that. So I would suggest supporting all classes whose constructor is not annotated with that.