Zend Framework 2 – аннотационные формы не работают

Благодаря @ Hikaru-Shindo я просмотрел AnnotationForms которые, по-видимому, лучше всего доступны для работы ModelForms . Но приведенный здесь пример не работает для меня.

 use Zend\Form\Annotation\AnnotationBuilder; $builder = new AnnotationBuilder(); $form = $builder->createForm('User'); 

Глядя на этот код, я задаюсь вопросом, где AnnotationBuilder знает, где искать эту пользовательскую форму. Тем более, что в аннотации в форме def есть нижний регистр пользователя,

 @Annotation\Name("user") 

Я поместил код defform формы в «MyModule / Form / UserForm.php» и нижний код в мой контроллер. Правильно ли это?

Это может быть ваша сущность (и определение формы) для пользовательского объекта (краткая версия):

 namespace Application\Entity; use Doctrine\ORM\Mapping as ORM; use Zend\Form\Annotation as Form; /** * @ORM\Entity * @ORM\Table(name="application_user") * @Form\Name("user") * @Form\Hydrator("Zend\Stdlib\Hydrator\ObjectProperty") */ class User { /** * @var int * @ORM\Id @ORM\Column(name="id", type="integer") * @ORM\GeneratedValue * @Form\Exclude() */ protected $id; /** * @var string * @ORM\Column(name="user_name", type="string", length=255, nullable=false) * @Form\Filter({"name":"StringTrim"}) * @Form\Validator({"name":"StringLength", "options":{"min":1, "max":25}}) * @Form\Validator({"name":"Regex", "options":{"pattern":"/^[a-zA-Z][a-zA-Z0-9_-]{0,24}$/"}}) * @Form\Attributes({"type":"text"}) * @Form\Options({"label":"Username:"}) */ protected $username; /** * @var string * @ORM\Column(name="email", type="string", length=90, unique=true) * @Form\Type("Zend\Form\Element\Email") * @Form\Options({"label":"Your email address:"}) */ protected $email; } 

И использовать эту форму:

 use Zend\Form\Annotation\AnnotationBuilder; $builder = new AnnotationBuilder(); $form = $builder->createForm('Application\Entity\User'); // Also possible: // $form = $builder->createForm(new Application\Entity\User()); 

Поэтому строителю необходимо полное имя вашего класса определения. Имя, заданное с помощью аннотаций, – это имя формы, используемой, например, для создания атрибута id формы.

Если у вас есть оператор использования, вы также можете использовать пространство имен:

 use Zend\Form\Annotation\AnnotationBuilder; use Application\Entity\User; $builder = new AnnotationBuilder(); $form = $builder->createForm('User'); // Also possible: // $form = $builder->createForm(new User()); 

Имела та же проблема. Решение является разумом. Мне давно нужно было узнать. Проблема заключается в первой строке вашего кода аннотации.

 /** 

Эта строка обычно используется для комментирования вашего кода аннотации, но все остальные оставляют ее пустой. Обычно проблем нет, но это как-то вызывает проблемы в аннотациях формы. Вы должны либо добавить комментарий, добавить пробел, либо перенести свою первую строку кода вверх. Так:

 /** Some comment to make this annotation work /** (<-- a space) 

или начните вот так:

 /** @ORM\Column(type="string") 

Не спрашивайте меня, почему это происходит, нашли решение где-то в Интернете. Как я понял, ошибка была сообщена.