Comment obtenir de l'enfant objet incorporé Admin classe Sonata Admin?

Je vais essayer d'obtenir et manipuler le réel de l'objet lié à une ImageAdmin classe dans SonataAdmin (à l'aide de Symfony 2.3). Cela fonctionne très bien lorsque l'ImageAdmin classe est la seule à être utilisé. Mais quand ImageAdmin est incorporé dans un autre Admin, il va terriblement mal.

Voici ce qui fonctionne lorsque vous n'avez pas intégré les Admins:

class ImageAdmin extends Admin {
    protected $baseRoutePattern = 'image';

    protected function configureFormFields(FormMapper $formMapper) {
        $subject = $this->getSubject();
    }
}

Mais lorsque vous incorporez ImageAdmin dans ParentAdmin en utilisant ceci:

class PageAdmin extends Admin {
    protected function configureFormFields(FormMapper $formMapper) {
        $formMapper->add('image1', 'sonata_type_admin');
    }
}

Puis, lorsque vous êtes de l'édition d'un Parent de l'élément avec l'id 10 et appel getSubject() dans ImageAdmin vous obtenez le Image avec l'id 10!

En d'autres termes getSubject() extraits de l'id de l'URL, puis appelle $this->getModelManager()->find($this->getClass(), $id);, qui renvois le Parent de l'id et l'id de l'Image. Oups!


Donc... ce que je veux faire est d'être en mesure de s'emparer de l'objet réel qui est en cours de rendu/édité dans le courant ImageAdmin exemple, si il est en cours de modification, directement ou par l'intermédiaire d'un formulaire intégré, et ensuite être capable de faire des choses avec elle.

Peut-être getSubject() est le mauvais arbre à aboyer, mais je remarque que $this->getCurrentChild() retourne false lorsqu'il est appelé à partir de ImageAdmin::configureFormFields(), même si les ImageAdmin est incorporé à l'aide de la sonata_type_admin type de champ. Je suis assez confus...

De toute façon, j'espère qu'il est possible de se procurer de l'objet dans certains évident que j'ai négligé et que quelqu'un ici peut aider à m'éclairer!

OriginalL'auteur caponica | 2013-08-07