我正在尝试为特定用户在表单中放置两个隐藏字段。我有这段代码:
<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中调用第347行的/Component/Form/Util/PropertyPath.php,在/var/www/Symfony/src/mio/mioBundle/Entity/Empleado.php第289行中定义
我说那是因为我必须填写状态是否有任何帮助?
答案 0 :(得分: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) : '' }}
答案 1 :(得分:-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 %}