2014-02-15 2 views
1

Я действительно разрабатываю персональный проект с Symfony2. И я хочу что-то сделать, но я не знаю, как это сделать. У меня есть объект Recette, и в этом объекте у меня есть имущество ingredients Этот ингредиент - тип json_array.Symfony 2: Save 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 я просто хочу, чтобы сэкономить пару информации. Ex:

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

Здесь вы можете найти мой Entity 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

Смежные вопросы