Jak mogę utworzyć niestandardowy filtr DataGrid w SonataAdmin
Mam transakcję podmiotu z wieloma kodami statusu. Chcę, aby użytkownik mógł zobaczyć te kody statusu jako ciągi w SonataAdmin. Użytkownik powinien również mieć możliwość filtrowania na podstawie tych kodów stanu.
<code>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"; } } } </code>
Skonfigurowałem mój Mapper listy Sonata w ten sposób:
<code>protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('id') ->add('statusAsString', null, array('sortable' => true, 'label' => 'Status')) } </code>
który działa doskonale:
Nie mogę jednak użyć tego samego co Filtr.
Jeśli spróbuję tego:
<code>protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ->add('user') ->add('status') // Works well ->add('statusAsString', null, array('label' => 'Status')) // Doesn't work: ; } </code>
To nie działa. Daje następujący błąd ->
<code>Notice: Undefined index: statusAsString in ..../Sonata\DoctrineORMAdminBundle\Guesser\FilterTypeGuesser.php </code>
Jak mogę to zrobić?