【问题标题】:symfony2 form hidden rowsymfony2 表单隐藏行
【发布时间】:2012-10-29 15:49:45
【问题描述】:

我正在尝试将两个隐藏字段放入特定用户的表单中。我有这个代码:

<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.'))
        ;
    }

但我收到此错误:

可捕获的致命错误:传递给 mio\mioBundle\Entity\Empleado::setRole() 的参数 1 必须是 mio\mioBundle\Entity\Role 的实例,null 给定,在 /var/www/Symfony/vendor/symfony/src/Symfony/Component/Form/Util 中调用/PropertyPath.php 在第 347 行并在 /var/www/Symfony/src/mio/mioBundle/Entity/Empleado.php 第 289 行中定义

我说是因为我要填写状态有什么帮助吗?

【问题讨论】:

  • 为什么需要那些隐藏字段?

标签: php symfony


【解决方案1】:

将检查角色代码放在控制器中

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) : '' }}

【讨论】:

    【解决方案2】:

    与其不完全渲染字段,不如尝试使用 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 %}
    

    【讨论】:

      猜你喜欢
      • 2012-05-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 2011-07-27
      • 2013-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多