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

标签 php forms model zend-form zend-framework2

感谢@Hikaru-Shindo我研究了 AnnotationForms,它似乎是 ModelForms 的最佳变通方法。但是示例显示here对我不起作用。

use Zend\Form\Annotation\AnnotationBuilder;

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

看着这段代码,我想知道 AnnotationBuilder 知道在哪里寻找这个用户表单。特别是因为在 def 形式的注解中有一个小写的 'user'

@Annotation\Name("user")

我将表单定义代码放入“MyModule/Form/UserForm.php”,并将较低的代码放入我的 Controller 。这是正确的方法吗?

最佳答案

这可能是用户实体(缩写版本)的实体(和表单定义):

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 语句,你也可以绑定(bind)命名空间:

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

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

关于php - Zend Framework 2 - 注释表单不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13974969/

相关文章:

c++ - 获取显卡型号?

Python Django - 模型 : for loop in query/filter

binding - SAPUI5 - 复杂模型绑定(bind)

php - MongoDB - 是否可以通过关联数组键查询?

PHP/MySQL - 在哪里可靠地处理插入自动重新请求(锁定表) - 客户端还是服务器?

javascript - 在 Meteor 中获取表单数据的更好方法是什么?

php - "Insert into post"– 将弹出窗口中的表单数据插入主窗口

javascript - JSON 请求为所有键/值对返回 'undefined'

php - 使用日期加载数据本地文件

javascript - 通过 JavaScript、jQuery 或 PHP 进行简单的 RSVP 表单验证?