SonataAdmin の ImageAdmin クラスに関連する実際のオブジェクトを取得して操作しようとしています (Symfony 2.3 を使用)。ImageAdmin クラスが使用されている唯一のクラスである場合、これは正常に機能します。しかし、ImageAdmin が別の管理者に組み込まれていると、ひどくうまくいきません。
管理者が埋め込まれていない場合の動作は次のとおりです。
class ImageAdmin extends Admin {
protected $baseRoutePattern = 'image';
protected function configureFormFields(FormMapper $formMapper) {
$subject = $this->getSubject();
}
}
ただし、これを使用して ImageAdmin を ParentAdmin に埋め込む場合:
class PageAdmin extends Admin {
protected function configureFormFields(FormMapper $formMapper) {
$formMapper->add('image1', 'sonata_type_admin');
}
}
次に、ID 10 の親アイテムを編集し、ImageAdmin で getSubject() を呼び出すと、ID 10 の画像が取得されます。
$this->getModelManager()->find($this->getClass(), $id);
つまり、getSubject() は URL から id を抽出し、Parent id と Image id を相互参照する を呼び出します。おっとっと!
だから...私がしたいのは、現在のImageAdminインスタンスでレンダリング/編集されている実際のオブジェクトを、直接編集されているか、埋め込みフォームを介して編集されているかに関係なく、取得できるようにすることです。それ。
多分 getSubject() は吠えるには間違ったツリーですが、$this->getCurrentChild()
ImageAdmin::configureFormFields() から呼び出された場合、その ImageAdmin が sonata_type_admin フィールド タイプを使用して埋め込まれている場合でも、false を返すことに注意してください。私はかなり混乱しています...
とにかく、私が見落としていた明らかな方法でオブジェクトを手に入れることが可能であり、誰かが私を啓発するのを助けることができることを願っています!