Благодаря @ 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")
Не спрашивайте меня, почему это происходит, нашли решение где-то в Интернете. Как я понял, ошибка была сообщена.