Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Forms Symfony2表单重复元素自定义标签_Forms_Symfony_Label_Element_Craueformflow - Fatal编程技术网

Forms Symfony2表单重复元素自定义标签

Forms Symfony2表单重复元素自定义标签,forms,symfony,label,element,craueformflow,Forms,Symfony,Label,Element,Craueformflow,我正在使用Symfony2和创建一个多步骤表单。除了“我的重复电子邮件”字段外,一切都进展顺利。为了我自己,我找不到如何贴上我想要的标签。我正在使用form_小部件(…)在Twig视图中自己呈现表单,并编写标签。我会按照客户的要求来安排一切。现在,他希望看到电子邮件标签为“E-mail*”和“Confirm E-mail*”(因为需要星星)。如果我使用form_row()渲染重复的元素,那么错误将不再显示在表单上(但我可以控制标签、捕捉)。显示错误的唯一方法(不要问我为什么)是使用form_小部

我正在使用Symfony2和创建一个多步骤表单。除了“我的重复电子邮件”字段外,一切都进展顺利。为了我自己,我找不到如何贴上我想要的标签。我正在使用form_小部件(…)在Twig视图中自己呈现表单,并编写标签。我会按照客户的要求来安排一切。现在,他希望看到电子邮件标签为“E-mail*”和“Confirm E-mail*”(因为需要星星)。如果我使用form_row()渲染重复的元素,那么错误将不再显示在表单上(但我可以控制标签、捕捉)。显示错误的唯一方法(不要问我为什么)是使用form_小部件(form.giver.email),它指向整个重复元素对象。问题是,使用form_小部件来呈现整个重复的元素并不能控制标签

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

我尝试使用细枝中的“.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
    ));
这会将标签打印为“电子邮件”和“确认”。下面是使用“选项”数组的示例:

这将在两个重复字段中打印“TESTTT”标签。我能做些什么吗?如上所述,如果电子邮件不相等或为空,则使用form_row()不会在表单提交时显示错误。因此,我不得不使用form_widget()并渲染整个重复对象


提前感谢您的时间。

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

{{ form_label(form.password.confirmpassword, 'Confirm Password') }}

任何人想知道为什么定制重新编写的表单输入不起作用,请查看以下内容:

$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'));
不会的

$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) }}

还有更简单、更正确的方法:

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

享受吧

下面的例子对我很有用

  • 此处是“类型”声明:

    $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') }}
    

这不适用于Symfony2.0。它在主分支(>=2.1?)中,但不在2.0分支中。是的,这只适用于Symfony 2.1。接受答案中提到的另一种方法在2.1中不再有效。太好了,它就像一个符咒!我的代码:$builder->add('password','repeated',array('type'=>'password','first\u name'=>“password”,'second\u name'=>“confirmpass”,'invalid\u message'=>“passwords not match”,'first\u options'=>array('label'=>'password'),'second_options'=>array('label'=>'repeat password'));如果在
FormBuilder
(或表单类型)中工作,语法将是
$FormBuilder->get('passwordFieldName')->get('second')->setAttribute('label',再次输入密码”);
$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') }}