0

エンティティを削除する実際の方法について、いくつかの改善が必要です。

    public function deleteAction($path)
    {
    $form = $this->createFormBuilder(array('path' => $path))
        ->add('path')
        ->setReadOnly(true)
        ->getForm();

    if ($this->getRequest()->getMethod() === 'POST') {
        $form->bindRequest($this->getRequest());

        if ($form->isValid()) {
            $image = $this->getImageManager()->findImageByPath($path);
            $this->getImageManager()->deleteImage($image);

            return $this->redirect($this->generateUrl('AcmeImageBundle_Image_index'));
        }
    }

    return $this->render('AcmeImageBundle:Image:delete.html.twig', array(
        'form' => $form->createView(),
    ));
}

書いている間に私がすでに見つけた2つの改善:

  1. コントローラーの追加メソッドで CreateFormBuilder

  2. 隠されたフィールドと追加の画像エンティティをオーバーギブしてレンダリングする

他に改善できることはありますか?

よろしく

4

1 に答える 1

1

(私の答えはコメントには長すぎるので、ここに追加します)

まず、Typeファイル(通常はYourApp \ YourBundle \ Form \ yourHandler.php)を作成する必要があります。これは、不明な場合に内部に配置する基本的なコードです。

<?php
namespace ***\****Bundle\Form;

use Symfony\Component\Form\Form;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManager;

use ***\****Bundle\Entity\your_entity;

class *****Handler
{
protected $form;
protected $request;
protected $em;

public function __construct(Form $form, Request $request, EntityManager $em)
{
    $this->form    = $form;
    $this->request = $request;
    $this->em      = $em;
}

public function process()
{
    if( $this->request->getMethod() == 'POST' )
    {
        $this->form->bindRequest($this->request);

        if( $this->form->isValid() )
        {
            $this->onSuccess($this->form->getData());

            return true;
        }
    }

    return false;
}

public function onSuccess(your_entity $object)
{
    // Make your stuff here (remove,....)
}
}

そして、あなたのコントローラーでは、私はそれをこのように呼んでいます:

if (!empty($_POST))
{
    $formHandler = new *****Handler($my_form, $this->get('request'), $this->getDoctrine()->getEntityManager());
    $formHandler->process();
}

私が十分に明確であることを願っています

于 2012-04-27T15:18:32.630 に答える