Sonata管理包文档似乎很少,我找不到实现此方法。
我设法为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)
;
}
configureListFields()
实现此功能?尝试使用相同的逻辑来处理configureDatagridFilters()但没有成功。如果没有queryBuilder和DQL,这可能吗?我宁愿使用实体对象及其属性作为逻辑。类似的东西:
protected function configureListFields(ListMapper $listMapper)
{
$listMapper->add('isValid', 'callback', [
'callback' => function($object) { <-- IMAGINARY FUNCTIONALITY
if ($object->getIsValid()) return true;
else return false;
}
]);
}
答案 0 :(得分:7)
我相信答案比你想要的更容易,除非我没有得到你想要的东西。
在您的实体中,创建以下方法
public function isValid()
{
// do your business logic here
}
在您的管理表单列表中
protected function configureListFields(ListMapper $listMapper)
{
$listMapper->add('isValid', 'boolean');
}
希望这有帮助。