phpstan-symfony icon indicating copy to clipboard operation
phpstan-symfony copied to clipboard

Missing stub file for Symfony Form DataMapperInterface

Open roerbakei opened this issue 1 year ago • 3 comments

Bug Report / Feature Request

When implementing the Symfony Form DataMapperInterface it will currently throw the following error:

Method  MyApp\FormType::mapDataToForms()  
         has parameter $forms with generic interface                                                                               
         Symfony\Component\Form\FormInterface but does not specify its types:                                                      
         TData     

When fixing this by defining TData for the FormInterface in the class that implements the DataMapperInterface, the type will be different from the interface resulting in an error:

   /**
    * @param Traversable<FormInterface<mixed>> $forms
    */
   public function mapDataToForms(mixed $viewData, Traversable $forms): void

Note: I've typed TData of FormInterface to mixed since $forms stands for the child forms of the form which is using the data mapper and so can have multiple types.

Parameter #2 $forms (Traversable<mixed,                                                                                   
         Symfony\Component\Form\FormInterface<mixed>>) of method                                                                   
         MyApp\FormType::mapDataToForms()  
         should be contravariant with parameter $forms (Traversable<mixed,                                                         
         Symfony\Component\Form\FormInterface>) of method                                                                          
         Symfony\Component\Form\DataMapperInterface::mapDataToForms()           

Unless I'm missing something it looks that a stub for Symfony Form DataMapperInterface is not provided yet.

roerbakei avatar Dec 04 '24 10:12 roerbakei

I have the same issue

mmarton avatar Jan 06 '25 13:01 mmarton

@mmarton you can temporarly resolve your issue by using the stub file @roerbakei provided in his PR -> https://github.com/phpstan/phpstan-symfony/pull/418/files

PHPStan docs explain how to add local stub-files

JefvdA avatar Jan 06 '25 13:01 JefvdA

Created a PR with @roerbakei his suggested change ( adding the stub file for the DataItemMapperInterface ), but with a small tweak that fixes the feedback I gave ( https://github.com/phpstan/phpstan-symfony/pull/418#discussion_r1905303708 )

JefvdA avatar Jan 09 '25 16:01 JefvdA