4
我有一個具有多個狀態代碼的實體事務。 我希望用戶能夠在SonataAdmin中將這些狀態碼看作字符串。用戶還應該能夠根據這些狀態碼進行過濾。如何在SonataAdmin中創建自定義數據網格過濾器
Entity Transaction
{
const TRANSACTION_STATUS_WAITING = 1;
const TRANSACTION_STATUS_PENDING = 2;
const TRANSACTION_STATUS_CONFIRMED = 3;
/**
* Set status
*
* @param smallint $status
*/
public function setStatus($status)
{
$this->status = $status;
}
/**
* Get status
*
* @return smallint
*/
public function getStatus()
{
return $this->status;
}
public function getStatusAsString()
{
switch($this->status){
case(self::TRANSACTION_STATUS_WAITING): return "Waiting for Merchant";
case(self::TRANSACTION_STATUS_PENDING): return "Pending Confirmation";
case(self::TRANSACTION_STATUS_CONFIRMED): return "Confirmed";
}
}
}
我已經配置我的索納塔列表映射是這樣的:
protected function configureListFields(ListMapper $listMapper)
{
$listMapper
->addIdentifier('id')
->add('statusAsString', null, array('sortable' => true, 'label' => 'Status'))
}
這工作完全正常:
但是我不能使用相同的過濾器。
如果我試試這個:
protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
$datagridMapper
->add('user')
->add('status') // Works well
->add('statusAsString', null, array('label' => 'Status')) // Doesn't work:
;
}
這是行不通的。它給出了以下錯誤 - >
Notice: Undefined index: statusAsString in ..../Sonata\DoctrineORMAdminBundle\Guesser\FilterTypeGuesser.php
我該如何使它工作?
感謝隊友。其實,我很快就解決了這個問題。我在實體中創建了另一個靜態方法,該方法返回數組中的選擇列表。然後我在我的DataGrid窗體中使用它。 – Amit 2012-06-25 06:59:13