2012-08-14 72 views
2

我运行此代码以获得我的选择控件并且工作正常。如何更改symfony2窗体中的选项名称select元素

$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() . ')'; 
} 

它工作正常的,有一个选择(单选)控制的另一种形式,但不是这个...

我得到的错误是

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

+1

实体中的属性名称是否为真select_label?请记住,您必须指定属性属性的PHP属性名称,而不是数据库名称 – Timo 2012-08-15 08:13:12

+0

放置实体的代码。你在这个实体中有名为'getSelectLabel()'的方法吗? – Munir 2012-08-15 14:38:29

+0

上面更新了问题 – 2012-08-16 22:09:10

回答

0

哦,对不起,我有一些对象在那里没有'没有$ this-> parent定义,我重写了我的名字函数,如下所示,它工作正常。

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

谢谢大家!

相关问题