2012-11-21 29 views
8

Vì vậy, trong hành động chỉnh sửa của Quản trị viên Sonata, tôi đang cố gắng hiển thị các trường biểu mẫu khác nhau tùy thuộc vào tạo hoặc chỉnh sửa ngữ cảnh.Cách lấy đối tượng bên dưới trong lớp Quản trị của Sonata khi được gọi bởi sonata_type_admin?

Có thể một số nền trước ..

Tôi có thực thể Thư viện và thực thể CoverPhoto ràng buộc với OneToOne.

Thư viện ảnh:

/** 
* @ORM\OneToOne(targetEntity="CoverImage", mappedBy="gallery", cascade={"all"}, orphanRemoval=true) 
**/ 
private $cover; 

CoverImage:

/** 
* @ORM\OneToOne(targetEntity="Gallery", inversedBy="cover") 
**/ 
private $gallery; 

Dưới đây là coresponding GalleryAdmin lớp:

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 
} 

Và ở đây chúng tôi đi với 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')) 
     ; 
    } 
} 

"Thumbnail" là lĩnh vực hình thức tùy chỉnh của tôi hiển thị thumbnail (cú sốc). Nhưng bây giờ tôi muốn trường này chỉ xuất hiện trong ngữ cảnh "chỉnh sửa".

này nên miếng bánh với

$this -> getSubject() 

phương pháp quản lý lớp học và điều kiện. Thật không may khi tôi gọi getSubject() trong lớp CoverImagesAdmin được sử dụng để biểu mẫu lồng nhau, nó luôn trả về null. Điều tương tự với getParent();

Calling getForm() kết quả trong

Fatal error: Maximum function nesting level of '500' reached, aborting! in /home/flameheart/Projects/KolberPhotography/vendor/symfony/symfony/src/Symfony/Component /OptionsResolver/Options.php on line 350

Tôi đã cố gắng để gọi về tất cả các phương pháp quản lý và FormMapper chỉ để xác định bối cảnh hình thức nhưng đã kết thúc với không có gì.

Các bạn có biết cách giải quyết vấn đề này một cách rõ ràng không?

+1

Chỉ để lưu nội dung, lỗi cấp cao nhất là làm với XDebug và không có gì để làm với Sonata Admin – frak

Trả lời

17

tôi cố gắng làm điều đó theo cách này:

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')); 
} 

Imo, điều Sonata này thực sự cần tải tài liệu hướng dẫn và sắp xếp thay vì phát triển hơn nữa.

+0

Bạn nên đánh dấu câu trả lời này là hợp lệ nếu điều này giải quyết được câu hỏi của bạn. Lời chào hỏi! – Airam

+5

Tôi đồng ý về việc tái cấu trúc. –

6

Đó là một câu hỏi cũ, tôi biết, nhưng cách sạch nhất tôi đã tìm thấy để làm điều này là:

$this->id($this->getSubject()) 

Nếu nó trả về true nó là một hình thức chỉnh sửa, nếu nó là sai, nó là một tạo hình thức.

+0

Cảm ơn vì điều này. Tôi đã thêm giải pháp của bạn vào blog của tôi: http: //blog.webdevilopers.net/how-to-check-if-subject-is-new-resp-action-là-tạo-hoặc-chỉnh sửa-in-sonata-admin/- Ngoài ra, bạn có thể kiểm tra tương tự bên trong mẫu của mình với {% nếu quản trị viên .id (đối tượng) không phải là null%}. – webDEVILopers

Các vấn đề liên quan