ZF2 Doctrine Form 注解类型选择

Posted

技术标签:

【中文标题】ZF2 Doctrine Form 注解类型选择【英文标题】:ZF2 Doctrine Form Annotation Type Select 【发布时间】:2014-05-25 14:25:54 【问题描述】:

我对选择元素的注释有疑问。我总是得到一个输入字段。

<div class="form-group "><label>test:</label><input type="number" name="test" class="form-control" value="1"></div>

这是我的注释。

/**
 * @var integer
 *
 * @ORM\Column(name="test", type="integer", nullable=false)
 * @Annotation\Type("Zend\Form\Element\Select")
 * @Annotation\Filter("name":"StringTrim")
 * @Annotation\Options("label":"test:", "value_options":"0":"yes","1":"no")
 */
private $persistent = '0';

我是不是忘记了什么?

亲切的问候:)

2014 年 4 月 23 日更新

在我的操作中,我创建了表单

    $builder = new DoctrineAnnotationBuilder($entityManager);
    $form = $builder->createForm( $user );
    $form->setHydrator(new DoctrineHydrator($entityManager,'Test\Entity\Test'));

这是我的观点

    <?
    $form = $this->form;
    $form->setAttribute('action', $this->url('user/edit', array('id' => $this->id))); //'contact/process'));
    $form->setAttribute('method', 'post');

    echo $this->form()->openTag($form);
    echo $this->formCollection($form);
    echo $this->form()->closeTag();

【问题讨论】:

如何在视图文件中呈现表单? 好吧,我也有同样的问题。创建了一个整数类型的 ORM/列并分配了一个 @Annotation\Type Zend\Form\Element\Select 但我收到异常“Zend\Form\View\Helper\FormSelect::render 要求该元素的类型是 Zend\ Form\Element\Select”,因为我正在尝试使用 formSelect 视图助手渲染元素,而 Doctrine 创建了一个 Zend\Form\Element\Number 类型的元素。另一种方法是为“test”的可能值声明一个新的 Doctrine ORM 实体,这对我来说已经适用于另一种成员变量,如“语言”和“安全问题” 您找到解决方案了吗?我也有同样的问题... 【参考方案1】:

Check the answer here...

这可能有帮助,也可能没有帮助,但至少值得一试......

【讨论】:

实际上注释本身正在工作。我试试看,但没什么区别。谢谢 :)【参考方案2】:

我知道这有点旧,但作为参考,这是 Doctrine 2 Annotated 实体中的实体属性 docblock,可用于呈现固定列表选择:

/**
 * @var string
 *
 * @ORM\Column(name="layout", type="string", length=45, nullable=true)
 * @Annotation\Type("Zend\Form\Element\Select")
 * @Annotation\Options(
 *   "label":"Layout:",
 *   "value_options":"":"", "one-page":"One Page", "multi-page":"Multi-page"
 * )    
 */
private $layout;

使用最新的 ZF 2.3.*。

【讨论】:

【参考方案3】:

我也有同样的问题。想要通过注释来构建我的选择框。 我认为 Hydrator 并没有真正做到(Doctrine 2 ORM v 1,* 和 ZF2.5)。

只需使用迭代器并使用

实体:

use Doctrine\ORM\Mapping as ORM;
use Zend\Form\Annotation;
    /**
     * @var \Backend\Entity\Mastercategory
     *
     * @Annotation\Type("Zend\Form\Element\Select")
     * @ORM\ManyToOne(targetEntity="Backend\Entity\Mastercategory")
     * @ORM\JoinColumns(
     *   @ORM\JoinColumn(name="sub_pid", referencedColumnName="id")
     * )
     */
    private $subPid;

控制器:

//mastercategories  is my Object EntityClass actually with getter_setter
$arr = new \ArrayIterator($mastercategories);
        $masterToArr = array();
        while ($arr->valid())
        
            $mid = $arr->current()->getId();
            $mname = $arr->current()->getMasterName();
            $masterToArr[$mid] = $mname;
            $arr->next();
        
        $form->get('subPid')->setOptions(array('type' => 'select', 'value_options' => $masterToArr));

查看者:

<?php echo $this->formSelect($form->get('subPid')); ?>

我知道用这样的东西填充控制器不是一个好主意,但它工作正常。

【讨论】:

以上是关于ZF2 Doctrine Form 注解类型选择的主要内容,如果未能解决你的问题,请参考以下文章

要处理的zf2 + doctrine2和No Metadata类

ZF2 Doctrine - 使用查询构建器如何指向存储库中的自定义方法

带有 ZF2 的 Doctrine 2 如何更新行

ZF2 - Doctrine ORM,简单表连接

如何通过 ZF2 FormElementManager 将 Doctrine ObjectManager 传递给表单

ZF2 Skeleton 和 Doctrine ORM xml 模式合并