-
Notifications
You must be signed in to change notification settings - Fork 88
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Narrow property types in validated objects #369
Comments
I've been doing sone work on this and based on the ticket description was pretty easy to get something working in two hours 🎉 @ondrejmirtes could you elaborate on what you mean with this:
Furthermore I'm wondering what should happen when assigning properties on a validated object. I guess that using the same narrowed type for Furthermore I have a technical question. Is there an easy method to parse the attributes arguments? For example |
I'd say that a validated object should stay validated, so it should only accept the narrowed type. I'd say it's a rare scenario anyway.
When you ask for attributes with You can see it has You can use this class to turn expressions into Types: https://apiref.phpstan.org/1.11.x/PHPStan.Reflection.InitializerExprTypeResolver.html There's a feature request for a nicer API: phpstan/phpstan#10443 |
/cc @DaveLiddament
When an object is validated with Symfony Validator, we could narrow down its property types based on constraints.
My idea is:
class ValidatedObjectType extends ObjectType
ObjectType::getProperty()
, read the validator attributes, and narrow the property type in reflection returned from parent. We'd probably createnew ValidatedObjectPropertyReflection
, inject the original object, and only override the type getters.ValidatedObjectType::isSuperTypeOf
andacceptsWithReason
answer.symfony-validated<UserDTO>
and return ValidatedObjectType thanks to https://phpstan.org/developing-extensions/custom-phpdoc-types.The only missing part is to narrow the object type to a validated one after calling the validator:
This interface isn't really static analysis friendly. It'd be a job for a type-specifying extension to do that, but something like
$validator->isValid($author)
would be much easier to work with.The text was updated successfully, but these errors were encountered: