【问题标题】:How to change option names in symfony2 form select element如何在 symfony2 表单选择元素中更改选项名称
【发布时间】:2012-08-14 21:10:27
【问题描述】:

我运行此代码来获取我的选择控件,它工作正常。

    $builder
        ->add('access', 'entity', array(
            'label' => 'Behörigheter',
            'multiple' => true,   // Multiple selection allowed
            'expanded' => true,   // Render as checkboxes
            'property' => 'name',
            'class'    => 'BizTV\ContainerManagementBundle\Entity\Container',
            'query_builder' => function(\Doctrine\ORM\EntityRepository $er) use ($company) {
                $qb = $er->createQueryBuilder('a');
                $qb->innerJoin('a.containerType', 'ct');
                $qb->where('a.containerType IN (:containers)', 'a.company = :company');
                $qb->setParameters( array('containers' => array(1,2,3,4), 'company' => $company) );
                $qb->orderBy('ct.id', 'ASC');

                return $qb;
            }
        )); 

现在我希望能够为复选框自定义标签,前几天我了解到,通过将属性更改为 select_label 并在实体中定义该函数,您可以完成此操作,但是使用此查询它不起作用.

这是因为我要加入吗?有办法实现吗?

这是行不通的代码

    $builder
        ->add('access', 'entity', array(
            'label' => 'Behörigheter',
            'multiple' => true,   // Multiple selection allowed
            'expanded' => true,   // Render as checkboxes
            'property' => 'select_label',
            'class'    => 'BizTV\ContainerManagementBundle\Entity\Container',
            'query_builder' => function(\Doctrine\ORM\EntityRepository $er) use ($company) {
                $qb = $er->createQueryBuilder('a');
                $qb->innerJoin('a.containerType', 'ct');
                $qb->where('a.containerType IN (:containers)', 'a.company = :company');
                $qb->setParameters( array('containers' => array(1,2,3,4), 'company' => $company) );
                $qb->orderBy('ct.id', 'ASC');

                return $qb;
            }
        )); 

在我拥有的实体中:

public function getSelectLabel()
{
    return $this->name . ' (' . $this->parent->getName() . ')';
}

它适用于另一种具有 SELECT(单选)控件的表单,但不适用于这个......

我得到的错误是

致命错误:在第 190 行的 /var/www/biztv_symfony/src/BizTV/ContainerManagementBundle/Entity/Container.php 中的非对象上调用成员函数 getName()

【问题讨论】:

  • 你的实体中的属性名真的是select_label吗?请记住,您必须为属性属性指定 PHP 属性名称而不是数据库名称
  • 把你的实体的代码。您在此实体中是否有名称为“getSelectLabel()”的方法?

标签: php forms symfony


【解决方案1】:

抱歉,我有一些对象没有定义 $this->parent,我重写了我的 name 函数,如下所示,它工作正常。

public function getSelectLabel()
{
    if (isset($this->parent)) {
        return $this->name . ' (' . $this->parent->getName() . ')';
    }
    else {
        return $this->name;
    }
}

谢谢大家!

【讨论】:

    猜你喜欢
    • 2021-04-28
    • 1970-01-01
    • 2018-12-04
    • 2022-11-08
    • 1970-01-01
    • 2011-12-21
    • 1970-01-01
    • 2012-02-11
    • 1970-01-01
    相关资源
    最近更新 更多