2

我正在阅读http://mwop.net/blog/2012-07-02-zf2-beta5-forms.html并在 zf2 和教义中使用该注释构建器没有任何问题

我想知道我是否有一个 zend 表单类......例如类 bookForm ......我如何在类中使用这个注释生成器

例如从学说实体注释加载基本字段,然后在 bookForm 类中添加一些额外的东西(如提交按钮)......

在 mwop.net 示例中,它在控制器中使用......如果我在该控制器中添加额外的表单字段将太难看..

use MyVendor\Model\User;
use Zend\Form\Annotation\AnnotationBuilder;

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

$form->bind($user);
$form->setData($dataFromSomewhere);
if ($form->isValid()) {
    // $user is now populated!
    echo $form->username;
    return;
} else {
    // probably need to render the form now.
}

请帮忙

4

3 回答 3

4

我在尝试找到使用 AnnotationBuilder 添加字段集的方法时发现了这个问题。添加字段集的正确方法是像这样在您的实体中设置 Annotation\Type

namespace Application\Entity;
/** 
 * 
 * My Entity.
 * 
 * @ORM\Entity
 * @ORM\Table(name="my_table")
 * 
 * @Annotation\Name("my_name")
 * @Annotation\Type("fieldset")
 * 
 */
class SomeEntity ...

然后在您的表单中,您可以像这样将带注释的表单添加为字段集

namespace Application\Form;

use Zend\Form\Form,
    Doctrine\Common\Persistence\ObjectManager,
    DoctrineModule\Stdlib\Hydrator\DoctrineObject as DoctrineHydrator,
    Zend\Form\Annotation\AnnotationBuilder;

class SomeForm extends Form
{
    public function __construct(ObjectManager $objectManager)
    {
        // we want to ignore the name passed
        parent::__construct('entity-create-form');
        $this->setAttribute('method', 'post')
             ->setHydrator(new DoctrineHydrator($objectManager));

        $builder    = new AnnotationBuilder();

        $entity = new Application\Entity\SomeEntity;
        //Add the fieldset, and set it as the base fieldset
        $fieldset = $builder->createForm( $entity ) ;
        $fieldset->setUseAsBaseFieldset(true);
        //var_dump($fieldset);
        $this->add( $fieldset );


        $this->add(array(
            'type' => 'Zend\Form\Element\Csrf',
            'name' => 'csrf'
        ));

        $this->add(array(
            'name' => 'submit',
            'attributes' => array(
                'type' => 'submit',
                'value' => 'Save'
            )
        ));
    }
}

希望这对其他人有帮助。

于 2013-08-25T09:43:33.683 回答
2

您可以在实体类中设置基本表单类,例如

/**
 * @Annotation\Type("App\Form\BookForm")
 */
class Model
{
}

完整的工作示例:https ://gist.github.com/nepda/d572f9ad787c48c8555d

于 2015-04-04T12:39:23.217 回答
1

实际上,对于我的问题,您必须使用 zend_form 2.0 创建自己的基本表单,然后将您使用 AnnotationBuilder 构建的辅助表单作为字段集添加到第一个表单

代码示例:

$newform = new BaseForm();


        $user = new Entity\Material;
        $builder = new AnnotationBuilder();
        $form = $builder->createForm($user);
        $fld = $form->getElements();
        foreach ($fld as $fldone) {
            $newform->add($fldone);
        }
于 2012-08-22T07:41:45.277 回答