Как я могу создать собственный фильтр DataGrid в SonataAdmin
У меня есть транзакция сущности с многочисленными кодами состояния. Я хочу, чтобы пользователь мог видеть эти коды состояния в виде строк в SonataAdmin. Пользователь также должен иметь возможность фильтрации на основе этих кодов состояния.
<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>
Я настроил свой Sonata List Mapper следующим образом:
<code>protected function configureListFields(ListMapper $listMapper) { $listMapper ->addIdentifier('id') ->add('statusAsString', null, array('sortable' => true, 'label' => 'Status')) } </code>
который прекрасно работает:
Однако я не могу использовать то же самое, что и фильтр.
Если я попробую это:
<code>protected function configureDatagridFilters(DatagridMapper $datagridMapper) { $datagridMapper ->add('user') ->add('status') // Works well ->add('statusAsString', null, array('label' => 'Status')) // Doesn't work: ; } </code>
Это не работает. Это дает следующую ошибку - & gt;
<code>Notice: Undefined index: statusAsString in ..../Sonata\DoctrineORMAdminBundle\Guesser\FilterTypeGuesser.php </code>
Как я могу заставить это работать?