3

@Hikaru-Shindoに感謝しAnnotationFormsますModelForms. しかし、ここに示されている例私にはうまくいきません。

use Zend\Form\Annotation\AnnotationBuilder;

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

このコードをAnnotationBuilder見ると、このユーザー フォームを探す場所をどこで知っているのだろうかと思います。特に、フォーム def の注釈には小文字の「user」があるためです。

@Annotation\Name("user")

フォーム定義コードを「MyModule/Form/UserForm.php」に入れ、下位コードをコントローラーに入れました。これは正しい方法ですか?

4

2 に答える 2

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;

}

そして、このフォームを使用するには:

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 ステートメントがある場合は、名前空間を結合することもできます。

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

$builder = new AnnotationBuilder();
$form    = $builder->createForm('User');
// Also possible:
// $form = $builder->createForm(new User());
于 2012-12-20T15:14:39.480 に答える