我正在开发symfony中的应用程序,以跟踪文档的工作流程。在文档的生命周期中,参与各个部门,我的意思是,每个部门的人员都有自己的角色(ROLE_USER
,ROLE_SYSTEMS
...)。我对所有这些形式都有相同的形式,但是在文档生命周期的不同状态中,其中一个必须完成特定的字段,其余的将是禁用或只读。
我想知道在Symfony中执行此操作的最佳方法是什么,检查角色并禁用用户在生命周期的每个时刻都无法编辑的文件。
我已经调查并为我的twig模板找到了类似的东西,但我必须为每个字段和每个角色执行此操作,我不知道是否可以将其应用于字段属性,如disabled或readonly,是吗?
{{% if is_granted('ROLE_ADMIN') %}
<a href="...">Delete</a>
{% endif %}
我也听说过选民,但我不清楚它是如何运作的,以及它是否适合我的情况。
您怎么看?
答案 0 :(得分:0)
简单但丑陋的方式是不同的表单类型(只是为了找出哪些字段是必要的,哪些字段不是,但它是可选的)。
更好的方法是PRE_SET_DATA
,例如public function buildForm(FormBuilderInterface $builder, array $options)
{
// Add your general fields which are available for all
//$builder->add(...)
// at the end add an EventListener
$builder->addEventListener(FormEvents::PRE_SET_DATA, [$this, 'onPreSetData']);
}
,你可以添加/删除(不确定modifien是否也可用)。
Look here to find out more -> How to Dynamically Modify Forms Using Form Events
基本上你应该尝试以下:
onPreSetData
并在同一个form-class中创建public function onPreSetData(FormEvent $formEvent)
{
$form = $formEvent->getForm();
$entity = $formEvent->getData();
//if user is admin then $form->add(...) like above in with $buildForm->add(...)
}
方法:
search