我正在使用Symfony2和CraueFormFlowBundle创建一个多步骤表单。除了我重复的电子邮件字段外,一切进展顺利。为了我,我不能找到如何贴上我想要的标签。我正在使用form_widget(...)和编写标签在Twig视图中自己呈现表单。我按照客户的意愿定位一切。现在,他希望看到电子邮件标签为“电子邮件*”和“确认电子邮件*”(因为它们是必需的星标)。如果我使用form_row()渲染重复的元素,则表单上不再显示错误(但我可以控制标签,snap)。显示错误的唯一方法(不要问我为什么),是通过使用指向整个重复元素对象的form_widget(form.giver.email)。问题是,使用form_widget渲染整个重复元素使我无法控制标签。
通过渲染整个重复元素,它使用“first_name”和“second_name”参数打印标签。出于显而易见的原因,我不能在这些参数中加入大写字母,短划线和星号。如果我尝试在options数组中设置标签,那么该标签将传递给两个字段,如Symfony2 doc中所述......
我尝试使用twig中的“.first”和“.second”打印,但是我收到一条错误,指出这些在FormView中不存在。
现在我想要的是能够分别设置两个标签!这是我目前的代码:
$builder->add('email', 'repeated', array(
'type' => 'email',
'first_name' => 'email',
'second_name' => 'confirm',
'invalid_message' => 'The e-mails you provided did not match.',
'error_bubbling' => false
));
这会将标签打印为“电子邮件”和“确认”。这是使用“选项”数组:
$builder->add('email', 'repeated', array(
'type' => 'email',
'first_name' => 'email',
'second_name' => 'confirm',
'invalid_message' => 'The e-mails you provided did not match.',
'error_bubbling' => false,
'options' => array(
'label' => "TESTTT"
),
));
这将在两个重复的字段上打印“TESTTT”标签。我能做些什么吗?如上所述,如果电子邮件不相等或者它们是空白的,则使用form_row()不会在表单提交时显示错误。所以我被限制使用form_widget()并渲染整个重复的对象。
提前感谢您的时间。
答案 0 :(得分:11)
有更简单正确的方法:
->add('plainPassword', 'repeated', array(
'type' => 'password',
'invalid_message' => "some.error.message",
'first_name' => 'somecoorectname', // (optional). 'first' value by default.
'first_options' => array(
'label' => 'label.for.future.translate' // Custom label for element
)
/*
The same way for Second field
*/
))
享受!
答案 1 :(得分:6)
{{ form_label(form.password.confirmpassword, 'Confirm Password') }}
答案 2 :(得分:5)
使用
$formView->getChild('passwordFieldName')->getChild('second')->set('label', 'Enter password again');
答案 3 :(得分:4)
以下示例适用于我。
这里是'type'声明:
$builder->add('username', 'text')
->add('email', 'email')
->add('password', 'repeated',
array('type' => 'password'));
这里'twig'使用
{{ form_errors(form.password.first) }}
{{ form_widget(form.password.first) }}
{{ form_label(form.password.first, 'Password') }}
{{ form_errors(form.password.second) }}
{{ form_widget(form.password.second) }}
{{ form_label(form.password.second, 'Confirm password') }}
答案 4 :(得分:2)
$builder->add('username', 'text')
->add('email', 'email')
->add('password', 'repeated',
array('type' => 'password',
'first_name'=>'Password',
'second_name' =>'Confirm password'));
不正确,最好试试
$builder->add('username', 'text')
->add('email', 'email')
->add('password', 'repeated',
array('type' => 'password',
'first_name'=>'first',
'second_name' =>'second'));
您将可以使用:
{{ form_errors(form.password.first) }}
{{ form_widget(form.password.first) }}
{{ form_label(form.password.first) }}
{{ form_errors(form.password.second) }}
{{ form_widget(form.password.second) }}
{{ form_label(form.password.second) }}
答案 5 :(得分:0)
尝试在翻译文件中添加字段名称和标签? 例如。 CraueFormFlowBundle.en.yml
答案 6 :(得分:-1)
有人想知道为什么自定义重新表单输入不起作用,请查看:
$builder->add('username', 'text')
->add('email', 'email')
->add('password', 'repeated');
将为您提供“第一”和“第二”密码,可根据以下方式调用:
{{ form_errors(form.password.first) }}
{{ form_widget(form.password.first) }}
{{ form_label(form.password.first) }}
{{ form_errors(form.password.second) }}
{{ form_widget(form.password.second) }}
{{ form_label(form.password.second) }}
但是这个:
$builder->add('username', 'text')
->add('email', 'email')
->add('password', 'repeated',
array('type' => 'password',
'first_name'=>'Password',
'second_name' =>'Confirm password'));
不会!!!