Ralat Symfony2 (2.0.17-DEV) 500 berlaku selepas mencipta jenis borang
黄舟
黄舟 2017-05-16 16:46:23
0
1
450

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);"

黄舟
黄舟

人生最曼妙的风景,竟是内心的淡定与从容!

membalas semua(1)
迷茫

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'
        // ...
    ))
;
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan