Zend框架2 - 译注形式不工作(Zend Framework 2 - Annotation F

2019-07-17 11:19发布

感谢@ル-进藤我看着AnnotationForms这似乎是最好的作为一个变通的ModelForms 。 但是所示的例子这里不适合我的工作。

use Zend\Form\Annotation\AnnotationBuilder;

$builder = new AnnotationBuilder();
$form    = $builder->createForm('User');

看着这个代码我不知道该AnnotationBuilder知道到哪里寻找这个用户的形式。 特别是因为在表格注释DEF有一个小写的“用户”

@Annotation\Name("user")

我把表格DEF代码为“MyModule的/表格/ UserForm.php”与低代码到我的控制器。 这是正确的方式?

Answer 1:

这可能是你的用户实体(shortend版)实体(和表单定义):

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属性的表单的名称。

如果你有一个使用它的语句,你也可以abond命名空间:

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

$builder = new AnnotationBuilder();
$form    = $builder->createForm('User');
// Also possible:
// $form = $builder->createForm(new User());


Answer 2:

有同样的问题。 该解决方案是一种mindbreaker。 我花了很长时间才找到。 问题就出在你的注释第一行代码。

/**

这条线通常用于注释你的注释代码,但大家的allmost离开它空。 通常情况下没有问题,但是这在某种程度上造成的形式标注的问题。 您应该添加一些评论,添加一个空格,或移动您的代码了第一道防线。 所以:

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

或像这样开头:

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

不要问我为什么发生这种情况,找到了解决办法某个地方。 我的理解已报告的bug。



文章来源: Zend Framework 2 - Annotation Forms don't work