Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/10/2013, 03:13
Pantaláimon
 
Fecha de Ingreso: julio-2006
Ubicación: Barcelona
Mensajes: 244
Antigüedad: 18 años, 4 meses
Puntos: 32
Fallo al renderizar un nuevo tipo de formulario.

Buenas, he definido un tipo de formulario llamado "expansible" casi idéntico al de 'collection' predefinido de Symfony2 pero que usaré exclusivamente para que se muestre como un campo que -con ayuda de Javascript- pueda añadir o quitar campos. De esta manera pienso que podré usar el tipo 'expansible' para renderizar este tipo de formularios dinámicos y 'collection' para otras cosas.

El problema es que siguiendo la guía algo debo hacer mal pues creo que no me renderiza el tipo:

Código PHP:
<?php
// src/Brondem/FormBundle/Entity/Expansible.php
namespace BrondemFormBundleEntity;

use 
DoctrineCommonCollectionsArrayCollection;

class 
Expansible
{
    private 
$fields;

    public function 
__construct()
    {
        
$this->fields = new ArrayCollection();
    }

    public function 
getFields()
    {
        return 
$this->fields;
    }

    public function 
setFields$fields )
    {
        
$this->fields $fields;
    }
}
Código PHP:
<?php
// src/Brondem/FormBundle/Form/Type/ExpansibleType.php
namespace BrondemFormBundleFormType;

use 
SymfonyComponentFormAbstractType;
use 
SymfonyComponentFormFormBuilderInterface;
use 
SymfonyComponentOptionsResolverOptionsResolverInterface;
use 
BrondemFormBundleEntityExpansible;


class 
ExpansibleType extends AbstractType
{
    public function 
buildForm(FormBuilderInterface $builder, array $options)
    {
        
$builder->add'fields''collection', array(
                           
'type'         => $options['type'],
                           
'allow_add'    => true,
                           
'allow_delete' => true,
              ))->
add'add'   'button', array( 'label' => $options[   'add_label'] ) )
                ->
add'delete''button', array( 'label' => $options['delete_label'] ) );
    } 

    public function 
setDefaultOptions(OptionsResolverInterface $resolver)
    {
        
$expansible = new Expansible();
        
$expansible->getFields()->addnull );

        
$resolver->setDefaults(array(
            
'type'         => 'text',
            
'add_label'    => 'Add',
            
'delete_label' => 'Delete',
            
'data_class'   => 'Brondem\FormBundle\Entity\Expansible',
            
'data'         => $expansible,
        ));
    }

    public function 
getName()
    {
        return 
'expansible';
    }
}
Y aquí la plantilla para indicar como lo debo mostrar 'expansible'( es solo una prueba para ver si funciona)
Código PHP:
{# src/Brondem/FormBundle/Resources/views/Form/expansible_widget.html.twig #}
{% block expansible_widget %}
    <
div>Es una prueba</div>
{% 
endblock %} 
Luego tengo el controlador y la plantilla en otro bundle:
Código PHP:
<?php

// src/Brondem/AdminBundle/Controller/SliceManager.php
namespace BrondemAdminBundleController;

use 
SymfonyBundleFrameworkBundleControllerController;

//prueba
use BrondemFormBundleEntityExpansible;
use 
BrondemFormBundleFormTypeExpansibleType;

class 
SliceManagerController extends Controller
{
    function 
selectSectionActionRequest $request )
    {
        
$form $this->createForm(new ExpansibleType(), null, array( 
            
'add_label' => 'Añadir',
            
'delete_label' => 'Quitar',
        ));

        return 
$this->render('BrondemAdminBundle::test.html.twig', array(
            
'form' => $form->createView(),
        ));
    }
}
Código PHP:
{# src/Brondem/AdminBundle/Resources/views/test.html.twig #}

{% extends '::base.html.twig' %}

{% 
form_theme form 'BrondemFormBundle:Form:expansible_widget.html.twig' %}

{% 
block body %}
    {{ 
form(form) }}
{% 
endblock %} 
Sin embargo en vez de mostrárseme por pantalla "Es una prueba". Se muestra el formulario, tal cual.

¿Qués es lo que falla?

Un saludo!