そのため、Sonata Adminの編集アクションでは、作成または編集コンテキストに応じて異なるフォームフィールドを表示しようとしています。
たぶん、最初にいくつかの背景。
GalleryエンティティとCoverPhotoエンティティがOneToOneにバインドされています。
ギャラリー:
/**
* @ORM\OneToOne(targetEntity="CoverImage", mappedBy="gallery", cascade={"all"}, orphanRemoval=true)
**/
private $cover;
表紙画像:
/**
* @ORM\OneToOne(targetEntity="Gallery", inversedBy="cover")
**/
private $gallery;
対応するGalleryAdminクラスは次のとおりです。
class GalleriesAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
-> add('name', null, array('label' => 'Nazwa'))
-> add('category', 'sonata_type_model', array('label' => 'Kategoria'), array('subject' => $this -> getSubject()))
-> add('cover', 'sonata_type_admin', array('label' => 'Okładka'))
-> add('images', 'sonata_type_collection', array('by_reference' => false, 'label' => 'Powiązane zdjęcia'), array(
'edit' => 'inline',
'sortable' => false,
'inline' => 'table',
))
;
}
//other stuff
}
そして、ここでCoverImageAdminを使用します。
class CoverImagesAdmin extends Admin
{
protected function configureFormFields(FormMapper $formMapper)
{
$formMapper
-> add('path', 'thumbnail', array('label' => 'Miniatura'))
-> add('file', 'file', array('required' => false, 'label' => 'Plik'))
;
}
}
「サムネイル」は、サムネイル(ショッカー)を表示するカスタムフォームフィールドです。しかし今、私はこのフィールドが「編集」コンテキストでのみ表示されるようにしたい。
これはケーキのはずです
$this -> getSubject()
Adminクラスと条件のメソッド。残念ながら、ネストされたフォームのレンダリングに使用されるCoverImagesAdminクラスでgetSubject()を呼び出すと、常にnullが返されます。getParent();と同じです。
getForm()を呼び出すと、
致命的なエラー:「500」の最大関数ネストレベルに達し、中止しました!/home/flameheart/Projects/KolberPhotography/vendor/symfony/symfony/src/Symfony/Component/OptionsResolver/Options.phpの350行目
フォームのコンテキストを判別するためだけに、AdminとFormMapperのすべてのメソッドを呼び出そうとしましたが、結局何も起こりませんでした。
皆さんはこれをきれいな方法で解決する方法を知っていますか?