Rumah  >  Soal Jawab  >  teks badan

Ralat Symfony2 (2.0.17-DEV) 500 berlaku selepas mencipta jenis borang

Saya membuat demo menambah, menyemak imbas, mengemas kini dan memadam produk mengikut manual PDF rasmi (en Edition) Terdapat atribut kategori banyak-ke-satu dalam produk tersebut.
src/Acme/StoreBundle/Entity/Product.php

/**
 * @ORM\ManyToOne(targetEntity="Category", inversedBy="products")
 * @ORM\JoinColumn(name="category_id", referencedColumnName="id")
*/
protected $category;

src/Acme/StoreBundle/Entity/Category.php

/**
 * @ORM\OneToMany(targetEntity="Product", mappedBy="category")
*/
protected $products;

Kemudian mengikut bab Borang, saya menukar halaman untuk menambah produk kepada borang untuk menghantar dan menambah produk:

public function createAction(Request $request)
    {
        $category = $this->getDoctrine()
            ->getRepository('AcmeStoreBundle:Category')
            ->find(1);

        $product = new Product();
        $product->setCategory($category);

        $form = $this->createFormBuilder($product)
            ->add('name')
            ->add('price')
            ->add('description')
            ->getForm();

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

            if($form->isValid())
            {
                $created = true;
                $em = $this->getDoctrine()->getEntityManager();
                $em->persist($product);
                $em->flush();
            }
        }

        return $this->render('AcmeStoreBundle:Default:create.html.twig', array('created' => $created, 'form' => $form->createView(), 'product_id' => $product->getId() ));
    }

Pada ketika ini, semua pautan boleh berfungsi seperti biasa, dan pangkalan data juga boleh mencipta data yang berjaya Kemudian saya melihat "Mencipta Kelas Borang", jadi saya mencipta kelas Borang menggunakan doktrin:generate:form yang disertakan dengan baris arahan:

php app/console doctrine:generate:form AcmeStoreBundle:Product

src/Acme/StoreBundle/Form/ProductType.php

namespace Acme\StoreBundle\Form;

use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilder;

class ProductType extends AbstractType
{
    public function buildForm(FormBuilder $builder, array $options)
    {
        $builder
            ->add('name') 
            ->add('price') 
            ->add('description') 
            ->add('category')
        ;
    }

    public function getName()
    {
        return 'acme_storebundle_producttype';
    }
}

Kemudian saya ubah suai kod pengawal mengikut manual:

...
use Acme\StoreBundle\Form\ProductType;
...
$form = $this->createForm(new ProductType(), $product);
...

Tetapi selepas mengosongkan cache, ralat symfony2 500 berlaku dalam alamat akses Mesej ralat dalam log ialah:

[2012-08-26 16:00:27] request.INFO: Matched route "store_create" (parameters: "_controller": "Acme\StoreBundle\Controller\DefaultController::createAction", "_route": "store_create") [] []
[2012-08-26 16:00:27] request.CRITICAL: Symfony\Component\Form\Exception\FormException: Entity "Acme\StoreBundle\Entity\Category" passed to the choice field must have a "__toString()" method defined (or you can also override the "property" option). (uncaught exception) at /work/projects/admin/php/vendor/symfony/src/Symfony/Bridge/Doctrine/Form/ChoiceList/EntityChoiceList.php line 188 [] []

Selepas menyahpepijat kandungan output gema, ia terletak pada ayat yang diubah suai "$form = $this->createForm(new ProductType(), $product);"

黄舟黄舟2735 hari yang lalu438

membalas semua(1)saya akan balas

  • 迷茫

    迷茫2017-05-16 16:48:23

    Maksud ralat ini ialah apabila Symfony menjana menu lungsur (<pilih>), ia tidak tahu apa yang harus digunakan sebagai kandungan teks pilihan (< pilihan> Penyelesaian telah disediakan dalam mesej ralat. Katakan anda mahu Teks yang dipaparkan ialah kategoriNama:

    (1) Tambahkan kaedah "__toString()" pada kelas Entiti anda

    public function __toString()
    {
        return $this->categoryName;
    }

    (2) Tentukan medan dalam Entiti sebagai teks pilihan:

    $builder
        ->add('name') 
        ->add('price') 
        ->add('description') 
        ->add('category', 'entity', array(
            // ...
            'property' => 'categoryName'
            // ...
        ))
    ;

    balas
    0
  • Batalbalas