Foros del Web » Programando para Internet » PHP »

Symfony ¿como Renderizar un formulario embebido symfony 2?

Estas en el tema de ¿como Renderizar un formulario embebido symfony 2? en el foro de PHP en Foros del Web. Hola cordial saludo a todos, quisiera que por favor me ayuden a guardar los datos de un formulario embebido en symfony 2. Tengo las siguientes ...
  #1 (permalink)  
Antiguo 26/11/2015, 13:40
 
Fecha de Ingreso: julio-2015
Mensajes: 2
Antigüedad: 8 años, 9 meses
Puntos: 0
Pregunta ¿como Renderizar un formulario embebido symfony 2?

Hola cordial saludo a todos, quisiera que por favor me ayuden a guardar los datos de un formulario embebido en symfony 2.

Tengo las siguientes entidades, Product y Category con relación de N - 1. en el formulario CategoryType añado los campos de Product para agregar uno mas.
pero cuando guardo en la tabla Product en el campo category_id queda en NULL.

ProductType:
Código PHP:
class CategoryType extends AbstractType
{
    
/**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        
$builder
            
->add('name''text')            
            ->
add('products''collection', array(
                
'type'         => new ProductType(),
                
'allow_add' => true,
                
'allow_delete' => true,
                
'prototype' => true,
                
'by_reference' => false,
                
'prototype_name' => 'products',

            ))
            
        ;
    }
    
    
/**
     * @param OptionsResolverInterface $resolver
     */
    // public function setDefaultOptions(OptionsResolver $resolver)
    // {
    //     $resolver->setDefaults(array(
    //         'data_class' => 'DeteccionBundle\Entity\Category'
    //     ));
    // }
    
public function configureOptions(OptionsResolver $resolver)
    {
        
$resolver->setDefaults(array(
            
'data_class' => 'DeteccionBundle\Entity\Category'
        
));
    }

    
/**
     * @return string
     */
    
public function getName()
    {
        return 
'category';
    }

CategoryType:
Código PHP:
class ProductType extends AbstractType
{
    
/**
     * @param FormBuilderInterface $builder
     * @param array $options
     */
    
public function buildForm(FormBuilderInterface $builder, array $options)
    {
        
$builder
            
->add('name')
            ->
add('price')
            
//->add('category')
        
;
    }
  
    public function 
configureOptions(OptionsResolver $resolver)
    {
        
$resolver->setDefaults(array(
            
'data_class' => 'DeteccionBundle\Entity\Product'
        
));
    }

    
/**
     * @return string
     */
    
public function getName()
    {
        return 
'product';
    }

Esta en mi plantilla:
Código HTML:
{% extends '::base.html.twig' %}

{% block body -%}

    
    
    {{ form_start(form) }}
        {# {{ form(form) }} #}
        {{ form_widget(form) }}
    {{ form_end(form) }}


    <a href="#" id="add-another-email">Añadir otro producto</a>
</ul>
{% endblock %}

{% block javascripts %}
{{ parent() }}
<script>

    // keep track of how many email fields have been rendered
    var emailCount = '{{ form.products|length }}';

    jQuery(document).ready(function() {
        jQuery('#add-another-email').click(function(e) {
            e.preventDefault();

            var productList = jQuery('#category_products');

            // grab the prototype template
            var newWidget = productList.attr('data-prototype');
            // replace the "__name__" used in the id and name of the prototype
            // with a number that's unique to your products
            // end name attribute looks like name="contact[products][2]"
            newWidget = newWidget.replace(/__name__/g, emailCount);
            emailCount++;

            // create a new list element and add it to the list
            var newLi = jQuery('<li></li>').html(newWidget);
            newLi.appendTo(productList);
        });
    })
</script>
{% endblock %}
Este es mi controller:
Código PHP:
public function createAction(Request $request)
    {
        
$entity = new Category();
        
$form $this->createCreateForm($entity);
        
//$form->handleRequest($request);
        
$form->bind($request);
        if (
$form->isValid()) {
            
            
$em $this->getDoctrine()->getManager();

            
$em->persist($entity);
            
$em->flush();

            return 
$this->redirect($this->generateUrl('category_show', array('id' => $entity->getId())));
        }

        return 
$this->render('DeteccionBundle:Category:new.html.twig', array(
            
'entity' => $entity,
            
'form'   => $form->createView(),
        ));
    } 
Agradezco su ayuda!
  #2 (permalink)  
Antiguo 26/11/2015, 16:27
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: ¿como Renderizar un formulario embebido symfony 2?

Esta pregunta es del manual: http://symfony.com/doc/current/cookb...llections.html y esta muy detallada
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #3 (permalink)  
Antiguo 27/11/2015, 14:22
 
Fecha de Ingreso: julio-2015
Mensajes: 2
Antigüedad: 8 años, 9 meses
Puntos: 0
Respuesta: ¿como Renderizar un formulario embebido symfony 2?

Cita:
Iniciado por hhs Ver Mensaje
Esta pregunta es del manual: [url]http://symfony.com/doc/current/cookbook/form/form_collections.html[/url] y esta muy detallada
amigo si me funcionara lo que esta en esa porqueria de manual que tiene symfony no estuviera preguntando!
  #4 (permalink)  
Antiguo 27/11/2015, 18:07
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: ¿como Renderizar un formulario embebido symfony 2?

Lea despacio y con calma. Analice los ejemplos que así de vistazo rápido tiene cosas que esta pasando por alto en su código.
Si llega a sentir frustración respires profundo y vaya a un lugar seguro en su mente o mejor aun, salga a distraerse un poco.
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.

Etiquetas: collection, forms, insert, symfony2
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 02:43.