【问题标题】:Symfony formtype query builder associationsSymfony 表单类型查询构建器关联
【发布时间】:2018-01-10 00:15:50
【问题描述】:

我使用 Symfony 3.2,我想为一个与另一个关联的实体创建一个表单类型:

class Aliment
    // ...
    private enseigneId;
    // ...

class Enseigne
    // ...
    private nomEnseigne
    // ...

并且 Aliment.enseigneId 指的是 Enseigne.id,但我想在我的表单中(CRUD,用于创建)是让用户选择一个 ID,但我想显示该 ID 的值,所以对用户来说更容易。

这是我的表单类型(票证):

public function buildForm(FormBuilderInterface $builder, array $options)
{
    $builder
        ->add('date', DateTimeType::class, array(
            'data' => new \DateTime()
        ))
        ->add('aliments')
        ->add('prixTotal')
        ->add('recapitulatif')
        ->add('modePaiement')
        ->add('enseigneId', EntityType::class, array(
            'class' => 'AppBundle\Entity\Enseigne',
            'choice_label' => function ($enseigne) {
                /** @var $enseigne Enseigne */
                return $enseigne->getNomEnseigne();
            }

        ));
}

但它一直显示整数 0(而 getNomEnseigne() 返回一个字符串并且数据库中充满了正确的数据集),我不知道该怎么做.. 我希望将其存储为整数,但我想(在选择字段中)显示为它所指的 Id 的值。

Id | nomEnseigne | ...
-----------------------
0  | LECLERC     | ...
1  | LIDL        | ...

在上面的示例中,用户会看到字符串“LECLERC”,但会存储整数 0。

感谢您的帮助。

【问题讨论】:

    标签: php symfony doctrine-orm associations symfony-forms


    【解决方案1】:

    你可以试试其他方法

    'choice_label' => 'nomEnseigne',
    

    或者实现Enseigne实体的__toString()方法

    /**
     * @return string
     */
    public function __toString()
    {
        if (empty($this->nomEnseigne) {
            return 'enseigne ' . $this->id;
        }
    
        return (string) $this->nomEnseigne;
    }
    

    【讨论】:

    • 我不能用'nomEnseigne'填充choice_label,因为我只有ID(enseigneId指的是Enseigne实体),一开始我认为可以使用查询生成器,但我不知道怎么做。
    • 好的,现在它可以正确显示名称,但是当我想保存我的更改时,我得到一个异常告诉我“Enseigne”的对象无法转换为“int”。是不是因为 'enseigneId' 是一个整数,但我正在返回一个字符串,并在我的表单中调用了 'getNomEnseigne'。
    • 你用了哪一种方式?对我来说,两者都很好。保存的问题应该在其他地方,因为选择标签不会影响选择值。你能显示处理表单的控制器代码吗?
    猜你喜欢
    • 2021-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多