1

ManyToOne リレーションシップを持つ 2 つのテーブルがあります。

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 フォームにメッセージを表示するにはどうすればよいですか?

前もって感謝します

4

1 に答える 1

3

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. trycatchブロックが残りの処理を行う必要があります。

2. Sonata Admin Generatorフォームにメッセージを表示するにはどうすればよいですか?

sol:キャッシュブロック内のメッセージは、sonataadminバンドルフォームに表示されます

すなわち。

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

ノート 。必要なファイルをすべてインポートしてください

于 2012-10-17T10:17:56.310 に答える