Comment puis-je créer une grille de données personnalisé filtre dans SonataAdmin

J'ai une entité de la Transaction avec de nombreux codes d'état.
Je veux que l'utilisateur soit en mesure de voir ces codes d'état comme des chaînes de caractères dans SonataAdmin. L'utilisateur doit également être en mesure de filtrer sur la base de ces codes d'état.

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";
        }
    }
}

J'ai configuré mon Sonate Liste Mapper comme ceci:

protected function configureListFields(ListMapper $listMapper)
{
    $listMapper
        ->addIdentifier('id')
        ->add('statusAsString', null, array('sortable' => true, 'label' => 'Status'))
}

qui fonctionne parfaitement bien:

Cependant, je ne peux pas utiliser le même comme un Filtre.

Si j'essaye ceci:

protected function configureDatagridFilters(DatagridMapper $datagridMapper)
{
    $datagridMapper
        ->add('user')
        ->add('status') //Works well 
        ->add('statusAsString', null, array('label' => 'Status')) //Doesn't work: 
    ;
}

Cela ne fonctionne pas. Il donne l'erreur suivante ->

Notice: Undefined index: statusAsString in ..../Sonata\DoctrineORMAdminBundle\Guesser\FilterTypeGuesser.php 

Comment puis-je le faire fonctionner?

OriginalL'auteur Amit | 2012-04-19