![](/img/trans.png)
[英]Symfony 2.8 Easyadmin DataTransformer for enum(yes, no) fields to represent boolean in forms
[英]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.