Проблема формы Zend Framework 3 с объектами привязки, использующими подсказки возвращаемого типа - PullRequest
0 голосов
/ 31 октября 2019

Поскольку я обновляю свое приложение до PHP 7.3, я решил добавить подсказку типа возврата к моим методам сущностей. Примером может быть что-то вроде этого:

class User {
    private $username;
    public method getUsername(): string { return $this->username}
}

Я использую эту сущность в форме (для создания пользователей), где я связываю ее так:

$user = new User();
$form->bind($user);
$form->setData($data);

Однако я получаю эту ошибкукоторый вызван гидратором (я использую гидратор DoctrineObject)

Return value of Admin\Entity\Auth\User::getUsername() must be of the type string, null returned
#0 ...\vendor\doctrine\doctrine-module\src\DoctrineModule\Stdlib\Hydrator\DoctrineObject.php(220): Admin\Entity\Auth\User->getUsername()
#1 ...\vendor\doctrine\doctrine-module\src\DoctrineModule\Stdlib\Hydrator\DoctrineObject.php(116): DoctrineModule\Stdlib\Hydrator\DoctrineObject->extractByValue(Object(Admin\Entity\Auth\User))
#2 ...\vendor\zendframework\zend-form\src\Fieldset.php(650): DoctrineModule\Stdlib\Hydrator\DoctrineObject->extract(Object(Admin\Entity\Auth\User))
...

Из приведенного выше фрагмента очевидно, что он вызывает метод getUsername для «пустого» объекта, который заставляет его возвращать ноль и выбрасыватьисключение.
Это логически неверно, поскольку у объекта должно быть имя пользователя, поэтому пометить его как nullable (? string) неверно.

Есть ли лучшее решение для этого? Потому что создание каждого возвращаемого метода равным nullable похоже на хак, который побеждает цель.

...