fla*_*art 8 symfony symfony-sonata sonata-admin
因此,在Sonata Admin的编辑操作中,我试图根据创建或编辑上下文显示不同的表单字段.
也许有些背景先..
我有一个Gallery实体和一个与OneToOne绑定的CoverPhoto实体.
画廊:
/**
* @ORM\OneToOne(targetEntity="CoverImage", mappedBy="gallery", cascade={"all"}, orphanRemoval=true)
**/
private $cover;
Run Code Online (Sandbox Code Playgroud)
封面图片:
/**
* @ORM\OneToOne(targetEntity="Gallery", inversedBy="cover")
**/
private $gallery;
Run Code Online (Sandbox Code Playgroud)
这是相应的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
}
Run Code Online (Sandbox Code Playgroud)
在这里,我们使用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'))
;
}
}
Run Code Online (Sandbox Code Playgroud)
"缩略图"是我的自定义表单字段,显示缩略图(shocker).但现在我希望这个字段只出现在"编辑"上下文中.
这应该是小菜一碟
$this -> getSubject()
Run Code Online (Sandbox Code Playgroud)
Admin类和条件的方法.不幸的是,当我在CoverImagesAdmin类中调用getSubject()时,它用于呈现嵌套形式,它总是返回null.与getParent()相同;
调用getForm()会导致
致命错误:达到'500'的最大功能嵌套级别,正在中止!在/ home/flameheart/Projects/KolberPhotography/vendor/symfony/symfony/src/Symfony/Component /OptionsResolver/Options.php 350行
我试图调用Admin和FormMapper的每个方法来确定表单的上下文但最终没有任何结果.
你们有什么想法以干净的方式解决这个问题吗?
fla*_*art 18
我设法这样做:
protected function configureFormFields(FormMapper $formMapper)
{
if($this -> getRoot() -> getSubject() -> getCover() && $this -> getRoot() -> getSubject() -> getCover() -> getId() )
{
$formMapper -> add('path', 'thumbnail', array('label' => 'Miniatura', 'attr' => array('id' => 'gallery_cover_image'), 'label_attr' => array('id' => 'gallery_cover_label')));
}
$formMapper -> add('file', 'file', array('required' => false, 'label' => 'Plik'));
}
Run Code Online (Sandbox Code Playgroud)
Imo,这个Sonata的东西真的需要大量的文档和重构而不是进一步的开发.
我知道这是一个老问题,但我发现这样做最干净的方法是:
$this->id($this->getSubject())
Run Code Online (Sandbox Code Playgroud)
如果返回true,则为编辑表单,如果为false,则为创建表单.
归档时间: |
|
查看次数: |
13573 次 |
最近记录: |