SYMFONY2:在

时间:2015-08-28 18:24:16

标签: symfony

在表单中保存数据后,我一直收到以下错误:

  

属性“righeFattura”或其中一种方法“addRigheFatturon()”/“removeRigheFatturon()”,“addRigheFatturum()”/“removeRigheFatturum()”,“setRigheFattura()”,“righeFattura()”, “__set()”或“__call()”存在并且在“Kritek \ Bundle \ GestionaleBundle \ Entity \ Fatture”类中具有公共访问权限。

这是我的发票类:

    class Fatture
    {

        /**
             * @ORM\OneToMany(targetEntity="FattureRighe", mappedBy="fattura", cascade={"persist","remove"}, orphanRemoval=true)
             **/

            private $righeFattura;

        /**
             * Constructor
             */
            public function __construct()
            {
                $this->ordine = new ArrayCollection();
                $this->righeFattura = new ArrayCollection();
                $this->createdate = new \DateTime();
                $this->billingdate = new \DateTime();
                if ($this->getModifyDate() == null) {
                    $this->setModifyDate(new \DateTime());
                }
            }

    /**
         * Add righeFattura
         *
         * @param \Kritek\Bundle\GestionaleBundle\Entity\FattureRighe $righeFattura
         *
         * @return Fatture
         */
        public function addRigheFattura(\Kritek\Bundle\GestionaleBundle\Entity\FattureRighe $righeFattura)
        {
            $this->righeFattura[] = $righeFattura;
            $righeFattura->setFattura($this);

            return $this;
        }

    /**
     * Remove righeFattura
     *
     * @param \Kritek\Bundle\GestionaleBundle\Entity\FattureRighe $righeFattura
     */
    public function removeRigheFattura(\Kritek\Bundle\GestionaleBundle\Entity\FattureRighe $righeFattura)
    {
        $this->righeFattura->removeElement($righeFattura);
    }

    /**
     * Get righeFattura
     *
     * @return \Doctrine\Common\Collections\Collection
     */
    public function getRigheFattura()
    {
        return $this->righeFattura;
    }
}

这是我的invoiceRows:

class FattureRighe
{
    /**
     * @var \Kritek\Bundle\GestionaleBundle\Entity\Fatture
     *
     * @ORM\ManyToOne(targetEntity="Fatture", inversedBy="righeFattura")
     * @ORM\JoinColumn(name="fattura_id", referencedColumnName="id")
     **/
    private $fattura;

/**
     * Set fattura
     *
     * @param \Kritek\Bundle\GestionaleBundle\Entity\Fatture $fattura
     * @return FattureRighe
     */
    public function setFattura(\Kritek\Bundle\GestionaleBundle\Entity\Fatture $fattura = null)
    {
        $this->fattura = $fattura;

        return $this;
    }

    /**
     * Get fattura
     *
     * @return \Kritek\Bundle\GestionaleBundle\Entity\Fatture 
     */
    public function getFattura()
    {
        return $this->fattura;
    }
}

InvoiceType:

class FattureType extends AbstractType
{
    protected $em;

    function __construct(EntityManager $em)
    {
        $this->em = $em;
    }

    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('righeFattura', 'collection', array(
                'type' => new FattureRigheType(),
                'required' => true,
                'allow_add' => true,
                'allow_delete' => true,
                'by_reference' => false,
                'label' => false,
                'cascade_validation' => true,
            ));
    }
}

InvoiceController:

/**
     * Creates a new Fatture entity.
     *
     * @Route("/dettaglio/{id}", name="fattura_dettaglio", options={"expose"=true})
     * @Template("KritekGestionaleBundle:Fatture:dettaglio.html.twig")
     */

    public function dettaglioAction($id, Request $request)
    {
$originalRigheFattura = new ArrayCollection();

        // Crea un array degli oggetti Tag attualmente nella base dati
        foreach ($fattura->getRigheFattura() as $righeFattura) {
            $originalRigheFattura->add($righeFattura);
        }
$editForm = $this->createForm(new FattureType($this->getDoctrine()->getManager()), $fattura);
$editForm->handleRequest($request);

        if ($editForm->isValid()) {


            foreach ($originalRigheFattura as $rigaFattura) {
                if (false === $fattura->getRigheFattura()->contains($rigaFattura)) {
                    $em->remove($rigaFattura);
                }
            }

            $em->persist($fattura);
            $em->flush();

            // ritorna in lista ordini
            return $this->redirect($this->generateUrl('fatture_list'));

    }
}

任何想法?哪里错了? 我在订单中做了同样的事情,但只在发票中不起作用。

这是InvoiceRowsType:

class FattureRigheType extends AbstractType
{
    /**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    public function buildForm(FormBuilderInterface $builder, array $options)
    {
        $builder
            ->add('quantita')
            ->add('sconto')
            ->add('cod')
            ->add('prodotto')
            ->add('prezzounit')
            ->add('prezzoimp')
            ->add('iva')
            ->add('ivaeur')
            ->add('prezzotot')
            ->add('rifCat')
//            ->add('fatturaId')
//            ->add('fattura')
        ;
    }

    /**
     * @param OptionsResolverInterface $resolver
     */
    public function setDefaultOptions(OptionsResolverInterface $resolver)
    {
        $resolver->setDefaults(array(
            'data_class' => 'Kritek\Bundle\GestionaleBundle\Entity\FattureRighe'
        ));
    }

    /**
     * @return string
     */
    public function getName()
    {
        return 'kritek_bundle_gestionalebundle_fatturerighe';
    }
}

0 个答案:

没有答案