symfony2 表单和entity疑问
例如:我想添加一篇博客,里面有一个分类,我应该有一个category_id字段,然后在添加博客的时候可以通过下拉列表选择。
疑问:
我的下拉列表中怎么才能有我添加好的分类列表呢!
posts和category的关系
<code>#Demo\TestBundle\Entity\Posts Demo\TestBundle\Entity\Posts: type: entity table: posts repositoryClass: Demo\TestBundle\Repository\PostsRepository id: id: type: integer id: true genertor: { strategy: AUTO } fields: title: type: string length: 64 author: type: string length: 32 create_at: type: integer update_at: type: integer manyToOne: category: targetEntity: Category inversedBy: posts Demo\TestBundle\Entity\Category: type: entity table: category repositoryClass: Demo\TestBundle\Repository\CategoryRepository id: id: type: integer id: true genertor: strategy: AUTO fields: title: type: string length: 16 create_at: type: integer update_at: type: integer oneToMany: posts: targetEntity: Posts mappedBy: category </code>
form表单时通过命令生成的:php app/console doctrine:generate:form DemoTestBundle:Posts
<code><?php namespace Demo\TestBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class PostsType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('id') ->add('title') ->add('author') ->add('create_at') ->add('update_at') ->add('category') ; } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Demo\TestBundle\Entity\Posts' )); } /** * 表单标示符, name属性 * @return string */ public function getName() { return 'posts'; } </code>
}
大概就是这样子,不知道哪里要调还是代码错误了,希望跟路大侠指教。
回复内容:
例如:我想添加一篇博客,里面有一个分类,我应该有一个category_id字段,然后在添加博客的时候可以通过下拉列表选择。
疑问:
我的下拉列表中怎么才能有我添加好的分类列表呢!
posts和category的关系
<code>#Demo\TestBundle\Entity\Posts Demo\TestBundle\Entity\Posts: type: entity table: posts repositoryClass: Demo\TestBundle\Repository\PostsRepository id: id: type: integer id: true genertor: { strategy: AUTO } fields: title: type: string length: 64 author: type: string length: 32 create_at: type: integer update_at: type: integer manyToOne: category: targetEntity: Category inversedBy: posts Demo\TestBundle\Entity\Category: type: entity table: category repositoryClass: Demo\TestBundle\Repository\CategoryRepository id: id: type: integer id: true genertor: strategy: AUTO fields: title: type: string length: 16 create_at: type: integer update_at: type: integer oneToMany: posts: targetEntity: Posts mappedBy: category </code>
form表单时通过命令生成的:php app/console doctrine:generate:form DemoTestBundle:Posts
<code><?php namespace Demo\TestBundle\Form; use Symfony\Component\Form\AbstractType; use Symfony\Component\Form\FormBuilderInterface; use Symfony\Component\OptionsResolver\OptionsResolverInterface; class PostsType extends AbstractType { /** * @param FormBuilderInterface $builder * @param array $options */ public function buildForm(FormBuilderInterface $builder, array $options) { $builder ->add('id') ->add('title') ->add('author') ->add('create_at') ->add('update_at') ->add('category') ; } /** * @param OptionsResolverInterface $resolver */ public function setDefaultOptions(OptionsResolverInterface $resolver) { $resolver->setDefaults(array( 'data_class' => 'Demo\TestBundle\Entity\Posts' )); } /** * 表单标示符, name属性 * @return string */ public function getName() { return 'posts'; } </code>
}
大概就是这样子,不知道哪里要调还是代码错误了,希望跟路大侠指教。
如果要用到 doctrine relationship 就用 ->add('product', 'entity' , array(...))
如果不要 doctrine relationship 就在
class PostsType extends AbstractType { private $choices; public function __construct( $choices) { $this->choices = $choices; } public function buildForm(FormBuilderInterface $builder, array $options) { .... $builder->add('category' , 'choices' , array( 'choices' => $this->choices , ) ); } }
在你要实例化表单的时候 public function xxxAction(){ $this->createForm( new PostsType( $this->getChoices() ) ); }
同样在Action中加入 private function getChoices() { //从Entitiy获取choices选项或者自己定义 return array(1 => '...' , 2 =>'....' ); }
把这个
->add('category')
改成
->add('category', 'choice')
试一下看看
->add('category', null, array('property' => 'title'));
->add('product', 'entity', array( 'class' => 'Demo\TestBundle\Entity\Category', 'property' => 'title' ))
看出错提示是说Category实体内没有实现__toString()这个方法。所以解决之道就是到Category实体里面去实现这个方法。你可以在__toString()这个方法里面返回要显示在下拉列表中的东西。比如用titile:
// file: Demo/TestBundle/Entity/Category.php public funciton __toString() { return $this->getTitle(); }

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas



PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

CakePHP ialah rangka kerja MVC sumber terbuka. Ia menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP mempunyai beberapa perpustakaan untuk mengurangkan beban tugas yang paling biasa.
