Как я могу создать собственный фильтр 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>

Как я могу заставить это работать?

Ответы на вопрос(2)

Ваш ответ на вопрос