2014-10-01 86 views
2

奏鸣曲管理束文档看起来很稀缺,我没有找到实现此目的的方法。奏鸣曲管理自定义列表字段(不是来自实体)

目标:在字段列表中显示布尔值。应该为其他属性的每个对象计算价值。

我设法实现这个为datagridFilter为doctrine_orm_callback但不是listFields。

工作代码configureDatagridFilters()

// LicenceAdmin.php 
protected function configureDatagridFilters(DatagridMapper $datagridMapper) 
{ 
    $datagridMapper->add('isValid', 'doctrine_orm_callback', [ 
      'callback' => [$this, 'isValidFilterCallback'], 
      'field_type' => 'checkbox', 
     ]); 
} 
public function isValidFilterCallback($queryBuilder, $alias, $field, $value) 
{ 
    // if no value or value == false means unchecked checkbox - show all instances 
    if (!$value || empty($value['value'])) { 
     return; 
    } 
    // if checked, display only by active logic 
    $dateNow = new \DateTime(); 
    $queryBuilder 
     ->andWhere("{$alias}.isActive = 1") 
     ->andWhere("{$alias}.validFrom <= :date") 
     ->andWhere("{$alias}.validTo > :date") 
     ->setParameter('date', $dateNow) 
    ; 
} 

问题

  1. 我这将如何实现这为configureListFields()?尝试了几种使用configureDatagridFilters()中的相同逻辑但没有成功的方法。
  2. 这可能没有queryBuilder和DQL?我宁愿使用实体对象及其属性来表示逻辑。喜欢的东西:

    protected function configureListFields(ListMapper $listMapper) 
    { 
        $listMapper->add('isValid', 'callback', [ 
         'callback' => function($object) { <-- IMAGINARY FUNCTIONALITY 
          if ($object->getIsValid()) return true; 
          else return false; 
         } 
        ]); 
    } 
    

回答

7

我相信答案是不是你要找的东西,除非我没有得到你所追求的更容易。

在你的实体,创建以下方法

public function isValid() 
{ 
// do your business logic here 
} 

在您的管理形式再上市

protected function configureListFields(ListMapper $listMapper) 
{ 
    $listMapper->add('isValid', 'boolean'); 
} 

希望这有助于。

+0

你是对的。我不敢相信我没有想到:) – 2014-11-19 17:11:12

+0

如果您的业务逻辑需要依赖关系,这不是一个好的解决方案。 – 2016-10-10 16:00:04

相关问题