symfony 2表单输入字段未呈现

时间:2015-08-03 14:40:46

标签: php forms symfony templates twig

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

这是代码

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

我做错了什么?

3 个答案:

答案 0 :(得分:4)

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

实际上,在UserForm课程中,你需要把它放在:

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

而不是

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

希望这个帮助

答案 1 :(得分:2)

如果要渲染表单组件,请尝试使用

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

答案 2 :(得分:0)

在你的TWIG中试试这个:

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