我目前在學習Symfony 3.2,並一直關注Symfony網站上的文檔。但是,我正在努力完成與表單有關的一些問題,所以任何指針都會很棒!試圖將數據加載到ChoiceType表單中,但它不能保存
我有兩個實體:
工作:
class Job
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
private $job_name;
/**
* @ORM\Column(type="integer")
*/
private $category_id;
和類別:
class Category
{
/**
* @ORM\Column(type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
/**
* @ORM\Column(type="string", length=100)
*/
private $category_name;
我也有每個以上(CategoryType
和JobType
)實體的形式。在我的工作類型中,我想category_id
是一個下拉列表,裏面列出了類別的ID。
我跟着這裏的文檔: http://symfony.com/doc/current/reference/forms/types/choice.html 並有評論說,在這裏問: Passing data to buildForm() in Symfony 2.8/3.0
在我JobController
我曾經主義來獲取所有的結果從類別表:
$em = $this->getDoctrine()->getManager();
$categories = $em->getRepository('AppBundle:Category')->findAll();
然後我在選項數組中輸入$ category到我的表單中:
$form = $this->createForm('AppBundle\Form\JobType', $job, array('categories' => $categories));
在我JobType:
public function configureOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'AppBundle\Entity\Job',
'categories' => null,
));
}
在我的建設者我加入了ChoiceType::class
我category_id
並添加選項類別的選擇陣列:
->add('category_id', ChoiceType::class, array(
'choices' => $options['categories'],
'choice_label' => 'category_name',
'choice_value' => 'id',
'placeholder' => 'Assign job to category...',
))
該工程確定在如何條款我們加載到視圖,但是當我點擊創建(提交表單)我得到以下錯誤:
An exception occurred while executing 'INSERT INTO jobs (job_name, category_id) VALUES (?, ?)' with params ["test", null, {}, null, null]:
Catchable Fatal Error: Object of class AppBundle\Entity\Category could not be converted to string
我猜測這與試圖保存爲對象的價值有關嗎?但我不確定如何解決這個問題,或者如果我以正確的方式解決問題?
謝謝!現在就開始工作吧!之前我曾嘗試過實體映射和實體類型,但我必須做到不正確。推測的選擇類型是這樣做的。我將查看您鏈接的文檔以獲得更好的理解。 - 謝謝您的幫助! – DBarkz
很高興它幫助你做出「點擊」:) – Veve