簡體   English   中英

Symfony2 + OneToMany +是否必須保存數據?

[英]Symfony2 + OneToMany + have to save data?

我有兩個實體:

KTH:

namespace Nauka\OneBundle\Entity;

use Doctrine\ORM\Mapping as ORM;
use Doctrine\Common\Collections\ArrayCollection;

/**
* Nauka\OneBundle\Entity\Kth
*
* @ORM\Table(name="kth")
* @ORM\Entity
*/
class Kth
{
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string $imie
 *
 * @ORM\Column(name="imie", type="string", length=30)
 */
private $imie;

/**
 * @var string $nazwisko
 *
 * @ORM\Column(name="nazwisko", type="string", length=30)
 */
private $nazwisko;

/**
 *
 * @var integer $adres
 * @ORM\OneToMany(targetEntity="Adres", mappedBy="kth")
 */
private $adres;


public function __construct() {
    $this->adres = new ArrayCollection();
}

public function __toString() {
    return $this->nazwisko;
}
======= SET & GET functions =======

ADRES命名空間Nauka \\ OneBundle \\ Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * Nauka\OneBundle\Entity\Adres
 *
 * @ORM\Table()
 * @ORM\Entity
 */
class Adres
{
/**
 * @var integer $id
 *
 * @ORM\Column(name="id", type="integer")
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="AUTO")
 */
private $id;

/**
 * @var string $ulica
 *
 * @ORM\Column(name="ulica", type="string", length=30)
 */
private $ulica;

/**
 * @var string $dom
 *
 * @ORM\Column(name="dom", type="string", length=5)
 */
private $dom;

/**
 *
 * @var type 
 * @ORM\ManyToOne(targetEntity="Kth", inversedBy="adres");
 */
private $kth;


public function __toString() {
    return $this->ulica;
}
=======SET & GET functions ===========

Kth表格-KthType()

class KthType extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
        ->add('imie')
        ->add('nazwisko')
            ->add('adres','collection',array(
                'type' => new AdresType(),
                'allow_add' => true,
                'allow_delete' => true
            ))
    ;
}

Adresy表單-AdresType()

public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->add('ulica')
->add('dom');
}

控制器中的動作:

public function testAction(Request $request)
{

  $adres = new Adres();
  $kth = new Kth();

  $kth->getAdres()->add($adres);
  $formularz = $this->createForm(new KthType(), $kth);

  if($request->isMethod('POST'))
    {
      $formularz->bindRequest($request);
      $query = $this->getDoctrine()->getEntityManager();
      $query->persist($formularz);
      $query->flush();
      return new Response('Done');
     } 

    return $this->render("NaukaOneBundle:Main:widok1.html.twig",array(
       'formularz' => $formularz->createView()
   )); 
}

當我嘗試使用Kth表單向數據庫中添加某些內容時-symfony給我:

The class 'Symfony\Component\Form\Form' was not found in the chain configured namespaces Nauka\OneBundle\Entity
500 Internal Server Error - MappingException

因此,有人可以告訴我,我做錯了什么?

您不能持久保存Form實例,在您的情況下$formularz

實際上,您打算做的是保留由$kth變量引用的實體。

更換你的if你的控制器動作里面塊:

if ($request->isMethod('POST') && $formularz->bindRequest($request)->isValid()) {
    $em = $this->getDoctrine()->getEntityManager();
    $em->persist($kth);
    $em->flush();

    return new Response('Done');
}

我認為您必須保留Form而不是Form的數據。

if($request->isMethod('POST'))
{
  $formularz->bindRequest($request);
  $query = $this->getDoctrine()->getEntityManager();
  $query->persist($formularz**->getData()**);
  $query->flush();
  return new Response('Done');
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM