我正在尝试创建简单的表单,但由于某种原因,不会呈现输入字段。源代码显示表单的打开和关闭标记,但不是输入字段本身。
这是代码
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) }}
我做错了什么?
答案 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 %}