2012-10-17 34 views
1

我有2個具有ManyToOne關係的表。在Sonata管理軟件包中處理多對一的異常

class Parent 
{ 
    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * 
    * @ORM\OneToMany(cascade={"persist"},targetEntity="Child", mappedBy="parent") 
    */ 

    private $child; 

    // getters and setters 
} 

class child{ 

    /** 
    * @var integer $id 
    * 
    * @ORM\Column(name="id", type="integer", nullable=false) 
    * @ORM\Id 
    * @ORM\GeneratedValue(strategy="IDENTITY") 
    */ 
    private $id; 

    /** 
    * @var Parent 
    * 
    * @ORM\ManyToOne(cascade={"persist"},targetEntity="Parent") 
    * @ORM\JoinColumns({ 
    * @ORM\JoinColumn(name="parent_id", referencedColumnName="id") 
    * }) 
    * 
    */ 
    private $parent; 

    // getters and setters 

} 
  1. 現在如何處理產生一個異常時,父表中的行被刪除?

  2. 如何在Sonata Admin Generator窗體中顯示消息?

在此先感謝

回答

2

1:現在我該如何處理時,父表中的行刪除生成異常?

溶膠:下面的步驟應該做的伎倆

  1. 覆蓋由奏鳴曲管理包提供的CRUDController。確保重寫的CRUDController與原來的CRUDController位於相同的位置。 ie.YourProject/AdminBundle/Controller/CRUDController.php

  2. 將deleteAction和batchActionDelete從原始控制器複製到覆蓋控制器。即

    公共職能deleteAction($ ID) {

    $id  = $this->get('request')->get($this->admin->getIdParameter()); 
    
        $object = $this->admin->getObject($id); 
    
        if (!$object) { 
         throw new NotFoundHttpException(sprintf('unable to find the object with id : %s', $id)); 
        } 
    
        if (false === $this->admin->isGranted('DELETE', $object)) { 
         throw new AccessDeniedException(); 
        } 
    
        if ($this->getRequest()->getMethod() == 'DELETE') { 
    
        try { 
    
          $this->admin->delete($object); 
    
          $this->get('session')->setFlash('sonata_flash_success', 'flash_delete_success'); 
    
         } catch (\Exception $e) { 
    
          $this->get('session')->setFlash('sonata_flash_error', sprintf('Cannot Delete because it has Dependeny')); 
         } 
         return new RedirectResponse($this->admin->generateUrl('list')); 
         } 
    
        return $this->render($this->admin->getTemplate('delete'), array(
         'object' => $object, 
         'action' => 'delete' 
        )); 
    } 
    
  3. 的try catch塊應該採取其他的事情。

2.如何在Sonata Admin Generator窗體中顯示消息?

溶膠:在高速緩存塊中的信息將顯示在奏管理員束的形式

try { 

        $this->admin->delete($object); 

        $this->get('session')->setFlash('sonata_flash_success', 'flash_delete_success'); 

       } catch (\Exception $e) { 

        $this->get('session')->setFlash('sonata_flash_error', sprintf('Cannot Delete because it has Dependeny')); 
       } 

注意。確保你導入了所有必要的文件