Zend Framework 2 - 注释表单不起作用

Ron*_*Ron 3 php forms model zend-form zend-framework2

感谢@ Hikaru-Shindo,我调查了AnnotationForms哪些似乎是最好的解决方案ModelForms.但是这里显示的例子对我不起作用.

use Zend\Form\Annotation\AnnotationBuilder;

$builder = new AnnotationBuilder();
$form    = $builder->createForm('User');
Run Code Online (Sandbox Code Playgroud)

看看这段代码,我想知道在哪里AnnotationBuilder知道在哪里查找这个用户表单.特别是因为在def形式的注释中有一个小写的"用户"

@Annotation\Name("user")
Run Code Online (Sandbox Code Playgroud)

我将表单def代码放入'MyModule/Form/UserForm.php',将较低的代码放入我的Controller中.这是正确的方法吗?

Hik*_*ndo 8

这可能是您的用户实体(和简短版本)的实体(和表单定义):

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;

}
Run Code Online (Sandbox Code Playgroud)

并使用此表单:

use Zend\Form\Annotation\AnnotationBuilder;

$builder = new AnnotationBuilder();
$form    = $builder->createForm('Application\Entity\User');
// Also possible:
// $form = $builder->createForm(new Application\Entity\User());
Run Code Online (Sandbox Code Playgroud)

因此构建器需要定义类的完全限定名称.您使用注释设置的名称是用于创建表单的id属性的表单的名称.

如果你有一个use语句,你也可以删除命名空间:

use Zend\Form\Annotation\AnnotationBuilder;
use Application\Entity\User;

$builder = new AnnotationBuilder();
$form    = $builder->createForm('User');
// Also possible:
// $form = $builder->createForm(new User());
Run Code Online (Sandbox Code Playgroud)