这个 createForm 参数有什么问题?
What's wrong with this createForm arguments?
我刚开始使用 symfony 表单,但我不明白,为什么会出现此类错误:
screen from profiler
那么我应该传递什么作为参数才能使其正常工作?
这是我来自 RegisterController 的代码:
/**
* @Route("/register", name="register")
*/
public function showRegisterAction()
{
$registration = new User();
$form = $this->createForm(new Register(), $registration, ['action' => $this->generateUrl('create'), 'method' => 'POST']);
return $this->render("/login/register.html.twig", ['form' => $form->createView()]);
}
和我的注册代码 class with fromBuilder:
class Register extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text', ['label' => 'USERNAME'])
->add('mail', 'email', ['label' => 'email'])
->add('password', 'password', ['label' => 'password'])
->add('password_repeat', 'password', ['mapped' => false, 'label' => 'confirm'])
->add('company', 'text', ['label' => 'company'])
->add('nip', 'text', ['label' => 'nip'])
->add('street', 'text', ['label' => 'street'])
->add('street_nr', 'text', ['label' => 'street_nr'])
->add('postal_code', 'text', ['label' => 'postal_code'])
->add('city', 'text', ['label' => 'city'])
->add('tel', 'text', ['label' => 'tel'])
->getForm();
}
public function getName()
{
return "register";
}
public function setDefaultOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['data_class' => 'AppBundle\Entity\User']);
}
}
createForm
方法要求第一个参数是 class 名称(字符串)形式,而不是它的实例。
因此更改此行:
$form = $this->createForm(new Register(), $registration, ['action' => $this->generateUrl('create'), 'method' => 'POST']);
到
$form = $this->createForm(
Register::class,
$registration,
['action' => $this->generateUrl('create'), 'method' => 'POST']
);
此外,请注意,在创建表单时不需要 getForm()
FormBuilder 的方法 classes。
供参考:http://symfony.com/doc/current/forms.html#creating-form-classes
我刚开始使用 symfony 表单,但我不明白,为什么会出现此类错误: screen from profiler
那么我应该传递什么作为参数才能使其正常工作? 这是我来自 RegisterController 的代码:
/**
* @Route("/register", name="register")
*/
public function showRegisterAction()
{
$registration = new User();
$form = $this->createForm(new Register(), $registration, ['action' => $this->generateUrl('create'), 'method' => 'POST']);
return $this->render("/login/register.html.twig", ['form' => $form->createView()]);
}
和我的注册代码 class with fromBuilder:
class Register extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('name', 'text', ['label' => 'USERNAME'])
->add('mail', 'email', ['label' => 'email'])
->add('password', 'password', ['label' => 'password'])
->add('password_repeat', 'password', ['mapped' => false, 'label' => 'confirm'])
->add('company', 'text', ['label' => 'company'])
->add('nip', 'text', ['label' => 'nip'])
->add('street', 'text', ['label' => 'street'])
->add('street_nr', 'text', ['label' => 'street_nr'])
->add('postal_code', 'text', ['label' => 'postal_code'])
->add('city', 'text', ['label' => 'city'])
->add('tel', 'text', ['label' => 'tel'])
->getForm();
}
public function getName()
{
return "register";
}
public function setDefaultOptions(OptionsResolver $resolver)
{
$resolver->setDefaults(['data_class' => 'AppBundle\Entity\User']);
}
}
createForm
方法要求第一个参数是 class 名称(字符串)形式,而不是它的实例。
因此更改此行:
$form = $this->createForm(new Register(), $registration, ['action' => $this->generateUrl('create'), 'method' => 'POST']);
到
$form = $this->createForm(
Register::class,
$registration,
['action' => $this->generateUrl('create'), 'method' => 'POST']
);
此外,请注意,在创建表单时不需要 getForm()
FormBuilder 的方法 classes。
供参考:http://symfony.com/doc/current/forms.html#creating-form-classes