How can I create a custom DataGrid filter in SonataAdmin
symfony, symfony-sonata
Solution
This worked as a temporary solution for me. If anyone has a better solution, please share.
$datagridMapper
->add('status', 'doctrine_orm_string', array(),
'choice', array('choices' => Transaction::getStatusList())
);
In the entity
public static function getStatusList()
{
return array(
self::TRANSACTION_STATUS_WAITING => "Waiting",
self::TRANSACTION_STATUS_PENDING_CONFIRMATION => "Pending Confirmation",
self::TRANSACTION_STATUS_CONFIRMED => "Confirmed",
self::TRANSACTION_STATUS_PAYMENT_REQUESTED => "Payment Requested",);
}
Problem
I have an entity Transaction with numerous status codes. I want the user to be able to see these status codes as strings in SonataAdmin. The user should also be able to filter on the basis of these status codes. ``` 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"; } } } ``` I have configured my Sonata List Mapper like this: ``` protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('id') ->add('statusAsString', null, array('sortable' => true, 'label' => 'Status')) } ``` which works perfectly fine: However I am unable to use the same as a Filter. If I try this: ``` protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ->add('user') ->add('status') // Works well ->add('statusAsString', null, array('label' => 'Status')) // Doesn't work: ; } ``` This doesn't work. It gives the following error -> ``` Notice: Undefined index: statusAsString in ..../Sonata\DoctrineORMAdminBundle\Guesser\FilterTypeGuesser.php ``` How can I make it work?