11

我正在使用 Symfony2 和CraueFormFlowBundle创建一个多步骤表单。除了我重复的电子邮件字段外,一切都很顺利。为了我,我无法找到如何放置我想要的标签。我正在使用 form_widget(...) 在 Twig 视图中自己渲染表单并编写标签。我按照客户的要求定位一切。现在,他希望看到电子邮件标签为“电子邮件*”和“确认电子邮件*”(星号,因为它们是必需的)。如果我使用 form_row() 渲染重复的元素,错误将不再显示在表单上(但我可以控制标签,snap)。显示错误的唯一方法(不要问我为什么)是使用指向整个重复元素对象的 form_widget(form.giver.email) 。问题是,使用 form_widget 呈现整个重复元素使我无法控制标签。

通过渲染整个重复元素,它使用“first_name”和“second_name”参数打印标签。出于显而易见的原因,我不能在这些参数中使用大写字母、破折号或星号。如果我尝试在选项数组中设置标签,则该标签将传递给 Symfony2 文档中所述的两个字段...

我尝试在 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() 并渲染整个重复的对象。

在此先感谢您的时间。

4

7 回答 7

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
     */
))

享受!

于 2012-05-18T08:41:23.427 回答
6
{{ form_label(form.password.confirmpassword, 'Confirm Password') }}
于 2012-01-21T21:11:54.583 回答
5

采用

$formView->getChild('passwordFieldName')->getChild('second')->set('label', 'Enter password again');
于 2012-01-24T13:48:14.777 回答
4

以下示例对我有用。

  • 这里的“类型”声明:

    $builder->add('username', 'text')
            ->add('email', 'email')
            ->add('password', 'repeated', 
            array('type' => 'password'));
    
  • 而这里的“树枝”使用

    {{ 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') }}
    
于 2012-06-14T13:04:00.033 回答
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) }}
于 2012-05-09T10:32:37.697 回答
0

尝试在翻译文件中添加字段名称和标签?例如 CraueFormFlowBundle.en.yml

于 2011-11-04T19:13:58.687 回答
-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'));

惯于!!!

于 2012-04-04T14:17:06.840 回答