繁体   English   中英

Symfony 2.8-取决于用户状态的表单字段

[英]Symfony 2.8 - forms fields depending on user status

我想知道如何解决此问题:我有4个字段的表格。 我希望第四个字段取决于用户状态(已记录或未记录)。 对于已登录的用户,我将从会话中获取ID,但未登录的用户应手动提供用户名。

我不知道我应该使用哪个选项。 Inherit_data,两种表单类型(两个重复的代码)或基于提交的数据的验证组。 有任何想法吗?

好的,有几种方法可以达到目的。

看一下FormEvents 在您的情况下,它将是FormEvents::PRE_SET_DATA ,然后阅读有关动态表单的信息。

我个人比较喜欢以下内容

public function buildForm(FormBuilderInterface $builder, array $options)
{
   //$builder->add( ... )
   //$builder->add( ... )
   //$builder->add( ... )

   //each-event with own method, but of cource it can be a callback like in a tutorial above
   $builder->addEventListener(FormEvents::PRE_SET_DATA, array(this, 'onPreSetData');

}

在同一个类中,有一个onPreSetData方法

public function onPreSetData ( FormEvent $formEvent )
{
    $form = $formEvent->getForm();
    $user = $formEvent->getData();

    //pseudo-code
    if( $user->isLoggedIn() )
    {
        $form->add('user', HiddenType::class, array(

        ));
    }
    else
    {
        $form->add('user', TextType::class, array(
            'label' => 'Username',
            'required' => true,
            'constraints' => array(
                new NotBlank(array('message' => 'please enter username...')),
                // new YourCustomValidator(array('message' => 'not enough minerals...')),
            )
        ));
    }
}

我个人认为,更优雅的解决方案是将用户从您的控制器传递给表单生成器。 此处的答案已涉及此内容: 如何在Symfony2的表单生成器中检查用户角色?

您可以按单个字段创建表单,例如

 {{ form_row(form.username) }}                           
 {{ form_row(form.email) }}                           
 {{ form_row(form.phone) }} 
 {% if(app.user) %}
     //your conditional field
 {% endif%} 

这样,您必须创建“提交”按钮以及csrf令牌(如果有)

我希望这会有所帮助:)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM