如何在 Symfony2 中使用 setter 设置表单字段值

Posted

技术标签:

【中文标题】如何在 Symfony2 中使用 setter 设置表单字段值【英文标题】:How to set a form field value by using setter in Symfony2 【发布时间】:2014-07-28 16:08:29 【问题描述】:

我有一个表单,它有一个自己的模型,包含这样的 setter 和 getter:

class CommentAdd

    protected $content;

    protected $yandexCaptcha;

    protected $isAnonymous;

    public function setContent($content)
    
        $this->content = $content;
    

    public function getContent()
    
        return $this->content;
    

    public function setYandexCaptcha(YandexCaptcha $yandexCaptcha) 
        $this->yandexCaptcha = $yandexCaptcha;
    

    public function getYandexCaptcha() 
        return $this->yandexCaptcha;
    

    public function setIsAnonymous($isAnonymous) 
        $this->isAnonymous = $isAnonymous;
    

    public function getIsAnonymous() 
        return $this->isAnonymous;
    

那么通过调用setter来设置任何字段值的方法是什么?我知道使用 getter ($form->getData()->getValue()) 获取任何值的方法,但我不知道设置的方法。

更新:

表单对象是这样创建的:

    $commentAddForm = $this->createForm(new CommentAddType(), new CommentAdd(), [
        'action' => $this->generateUrl('blog_comment_add', ['id' => $id]),
        'is_authenticated' => $this->container->get('security.context')->isGranted('IS_AUTHENTICATED_REMEMBERED')
    ]);

//That will return value by using the getter getContent from CommentAdd model
$commentAddForm->getData()->getContent();

//That will return value without using getter from the model
$commentAddForm->get('content')->getData();

//Now I want to know the way to set any data by using setter from the model
$commentAddForm-> ???

附:对不起我的英语。

【问题讨论】:

最简单的方法是创建一个表单类型。通读:symfony.com/doc/current/book/forms.html 我的表单类型有自己的模型。 如果我使用 $form->get('field')->getData() 将返回数据而不使用模型中的 getter。但是我找到了使用getter的方法(我在帖子中展示了),现在我想知道set的类似方法。 【参考方案1】:

您在创建表单的对象实例上设置数据;不在表单字段本身上。根据Symfony documentation:

$task = new Task();
$task->setTask('Write a blog post');
$task->setDueDate(new \DateTime('tomorrow'));

$form = $this->createFormBuilder($task)
    ->add('task', 'text')
    ->add('dueDate', 'date')
    ->add('save', 'submit')
    ->getForm();

【讨论】:

以上是关于如何在 Symfony2 中使用 setter 设置表单字段值的主要内容,如果未能解决你的问题,请参考以下文章

使用 Symfony 2 CLI 工具,如何为子类生成具有正确类型提示的 getter 和 setter?

问:Symfony2 - Doctrine - Class xxx 不是有效的实体或映射的超类

Getter Setter:使用还是不使用?

如何在 symfony2 中使用子文档映射 mongo 文档

如何在 Symfony2,学说 2 中使用 @SqlResultSetMapping?

symfony2:如何在 QueryBuilder 中使用 group_concat