2012-10-29 76 views
0

我试图在窗体中为特定用户放置两个隐藏域。我有这样的代码:symfony2窗体隐藏行

<div id="mio_miobundle_empleadotype"> 
{{ form_row(edit_form.dni) }} 
{{ form_row(edit_form.nombre) }} 
{{ form_row(edit_form.username) }} 
{{ form_row(edit_form.apellido1) }} 
{{ form_row(edit_form.apellido2) }} 
{{ form_row(edit_form.localidad) }} 
{{ form_row(edit_form.provincia) }} 
{{ form_row(edit_form.telefono) }} 
{{ form_row(edit_form.movil) }} 
{{ form_row(edit_form.email) }} 
{{ form_row(edit_form.direccion) }} 
{% if is_granted('ROLE_A') %}  
     {{ form_row(edit_form.activo) }} 
     {{ form_row(edit_form.role) }} 
{%endif%} 
{{ form_row(edit_form.password) }} 

和:

$builder 
      ->add('dni','text',array('label' => 'Dni')) 
      ->add('nombre','text',array('label' => 'Nombre')) 
      ->add('username','text',array('label' => 'Usuario')) 
      ->add('apellido1','text',array('label' => 'Apellido1')) 
      ->add('apellido2','text',array('label' => 'Apellido2')) 
      ->add('email','email',array('label' => 'Email')) 
      ->add('localidad','text',array('label' => 'Localidad')) 
      ->add('provincia','text',array('label' => 'Provincia')) 
      ->add('telefono','text',array('label' => 'Teléfono')) 
      ->add('movil','text',array('label' => 'Móvil')) 
      ->add('direccion','text',array('label' => 'Dirección')) 
      ->add('activo') 
      ->add('role') 
      ->add('password', 'repeated', array('first_name' => 'Nueva contraseña','second_name' => 'Repite contraseña','type' => 'password' ,'invalid_message'=> 'Las contraseñas deben ser iguales.')) 
     ; 
    } 

,但我得到这个错误:

Catchable Fatal Error: Argument 1 passed to mio\mioBundle\Entity\Empleado::setRole() must be an instance of mio\mioBundle\Entity\Role , null given, called in /var/www/Symfony/vendor/symfony/src/Symfony/Component/Form/Util/PropertyPath.php on line 347 and defined in /var/www/Symfony/src/mio/mioBundle/Entity/Empleado.php line 289

我说,因为我必须在国家填写任何帮助吗?

+0

你为什么需要这些隐藏字段? –

回答

-1

而不是完全不呈现字段,请尝试隐藏使用CSS的视图中的字段。

{% if is_granted('ROLE_A') %}  
     {{ form_row(edit_form.activo) }} 
     {{ form_row(edit_form.role) }} 
{% else %} 
     {{ form_widget(edit_form.activo, { 'attr': {'class': 'hide'} }) }} 
     {{ form_widget(edit_form.role, { 'attr': {'class': 'hide'} }) }} 
{% endif %} 
0

放入控制器

public function someAction() 
{ 
    $form = $this->createFrom(// ... 
    if (false === $this->get('security.context')->isGranted('ROLE_A')) { 
     $form->remove('activo'); 
     $form->remove('role'); 
    } 

    // ... 
} 

而且在模板检查检查角色代码,如果表单字段定义

{{ edit_form.activo is defined ? form_row(edit_form.activo) : '' }} 
{{ edit_form.role is defined ? form_row(edit_form.role) : '' }}