2014-02-15 75 views
1

我實際上是用Symfony2開發個人項目。 我想做點什麼,但我不知道該怎麼做。 我有一個實體Recette,在這個實體中我有一個屬性ingredients 這種成分屬性是json_array類型。Symfony 2:保存json並顯示值

<?php 

namespace sf2\RecetteBundle\Entity; 

use Doctrine\ORM\Mapping as ORM; 

/** 
* Recette 
* 
* @ORM\Table() 
* @ORM\Entity(repositoryClass="sf2\RecetteBundle\Entity\RecetteRepository") 
*/ 
class Recette 
{ 
    // ... 

    /** 
    * @var array 
    * 
    * @ORM\Column(name="ingredients", type="json_array") 
    */ 
    private $ingredients; 

    // ... 
} 

?> 

在這json_array我只想保存一些信息。 例如:

["name":"potatoes","quantity":"5kg"] 

在這裏,你可以找到我的實體FormType:

class RecetteType extends AbstractType 
{ 
    /** 
    * @param FormBuilderInterface $builder 
    * @param array $options 
    */ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name','text',array('label' => "test","attr"=>array('class'=>'test'))) 
      ->add('completionTime') 
      ->add('ingredients', 
       'collection', 
       array(
        'type'=>'text', 
        'prototype'=>true, 
        'allow_add'=>true, 
        'allow_delete'=>true, 
        'options'=>array(
        ) 
       ) 
      ) 
      ->add('preparation') 
      ->add('recetteCategories') 
      ->add('Ok','submit') 
     ; 
    } 
} 

在我的形式,我可以用任何問題jQuery的添加添加的成分,但我的問題是,我不能救數量信息。我不知道如何在我的表單中顯示兩個字段而不是一個字段來顯示配料。

目前,當我保存的成分我在數據庫這樣的數據:

["Potatoes"] 

如何我可以在我的表格顯示兩個字段的一個組成成分和如何將它保存在這種格式?

["name":"potatoes","quantity":"5kg"] 

謝謝。

+0

我想只是要注意的是那些「JSON數組」實際上是物體或哈希,他們是類型化的鬈brakets,如'{「名」:「土豆」 }'。 – Parziphal

回答

5

下面是從文檔的例子How to Embed a Collection of Forms

首先,你必須創建一個名爲Custom Form Field Type IngredientType:

IngredientType

namespace Acme\RecetteBundle\Form\Type; 

use Symfony\Component\Form\AbstractType; 
use Symfony\Component\Form\FormBuilderInterface; 
use Symfony\Component\OptionsResolver\OptionsResolverInterface; 

class IngredientType extends AbstractType 
{ 
    public function buildForm(FormBuilderInterface $builder, array $options) 
    { 
     $builder 
      ->add('name') 
      ->add('quantity') 
     ; 
    } 

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

services.yml

# src/Acme/RecetteBundle/Resources/config/services.yml 
services: 
    acme_demo.form.type.ingredient: 
     class: Acme\RecetteBundle\Form\Type\IngredientType 
     tags: 
      - { name: form.type, alias: ingredient } 

並將您的收藏中的The field type更改爲配料類型。

RecetteType

  ->add('ingredients', 
      'collection', 
      array(
       'type'=>'ingredient', 
       'prototype'=>true, 
       'allow_add'=>true, 
       'allow_delete'=>true, 
       'options'=>array(
       ) 
      ) 
     ) 
+0

非常感謝你! 它工作正常:) – user3314302