不呈现 symfony 2 表单输入字段

symfony 2 form input fields are not rendered

我正在尝试创建简单的表单,但由于某些原因未呈现输入字段。源代码显示呈现了表单的打开和关闭标记,但没有呈现输入字段本身。

这是代码

namespace SDProjectBundle\Forms;


use Symfony\Component\Form\AbstractType;
use Symfony\Component\Form\FormBuilderInterface;

class UserForm extends AbstractType
{
    public function formBuilder(FormBuilderInterface $builder, array $options)
    {
        $builder->add('email', 'text')
                ->add('password', 'password')
                ->add('Send', 'submit');
    }

    public function getName()
    {
        return 'app_users';
    }
} 

namespace SDProjectBundle\Controller;

use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\HttpFoundation\Request;
use SDProjectBundle\Forms\UserForm;
use SDProjectBundle\Entity\User;


class UsersController extends Controller
{
    public function addAction(Request $request)
    {
        $form = $this->createForm(new UserForm(), new User());

        return $this->render('SDProjectBundle:Users:add.html.twig', array(
            'form' => $form->createView(),
        ));
    }
}

add.html.twig

{{ form_start(form) }}
{{ form_widget(form) }}
{{ form_end(form) }}

我做错了什么?

如果你想渲染表单组件试试

{{ form_widget(form) }}

而不是

{{ form_label(form) }}

如果您只想呈现字段的标签,您需要将字段指定为:

{{ form_label(form.email) }}

您的表单的完整手动渲染版本可以是:

{{ form_start(form) }}
    {{ form_errors(form) }}

    <div>
        {{ form_label(form.email) }}
        {{ form_errors(form.email) }}
        {{ form_widget(form.email) }}
    </div>

    <div>
        {{ form_label(form. password) }}
        {{ form_errors(form. password) }}
        {{ form_widget(form. password) }}
    </div>

    <div>
        {{ form_widget(form. Send) }}
    </div>

{{ form_end(form) }}

在你的 TWIG 中试试这个:

{% block form_row %}
{% spaceless %}
    <div class="form-group">
        {{ form_label(form) }}
        <div>
            {{ form_widget(form) }}
        </div>
    </div>
{% endspaceless %}
{% endblock form_row %}

您在表单中实现了错误的方法class:您需要实现自定义表单类型的buildForm方法。

实际上,在 UserForm class 中,您需要输入:

public function buildForm(FormBuilderInterface $builder, array $options)

而不是

public function formBuilder(FormBuilderInterface $builder, array $options)

希望对您有所帮助