我希望为使用Default Symfony User类的登录表单创建一个Form类。
我把书放在这里:http://symfony.com/doc/current/book/security.html#using-a-的传统登录
现在我想把html变成一个Form类,我为它做了:
use Symfony'Component'Form'AbstractType;
use Symfony'Component'Form'FormBuilderInterface;
use Symfony'Component'OptionsResolver'OptionsResolverInterface;
class LoginForm extends AbstractType
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder->add('_username', 'text');
$builder->add('_password', 'password');
}
public function getName()
{
return 'login';
}
public function setDefaultOptions(OptionsResolverInterface $resolver)
{
$resolver->setDefaults(array(
'data_class' => 'Symfony'Component'Security'Core'User'User',
));
}
}
这应该行得通。
现在我试着这样称呼它:
$user = new 'Symfony'Component'Security'Core'User'User('ana', 'anon');
$form = $this->createForm(new LoginForm(), $user);
我有两个问题:
user类要求我指定一个用户名和密码,这根本不是我想要的。我希望这是一个登录表单,而不是创建一个用户表单
当我尝试渲染时,它会抛出一个错误:
Neither property "_username" nor method "get_username()" nor method "is_username()" exists in class "Symfony'Component'Security'Core'User'User" 500 Internal Server Error - InvalidPropertyException
我做错了什么?我还不想使用FOSUserBundle,我想学习默认的Symfony类,你可以为此称我为白痴。
编辑:我删除了字段名称中的下划线(_),它开始工作,但第一个问题仍然存在,现在我遇到了一个新问题:
如果我试图提交我的表格,我得到的只是Bad credentials
证书。
login.html.twig:
<form action="{{ path('main_login_check') }}" method="post">
{{ form_widget(form) }}
<button type="submit">login</button>
</form>
这就是所谓的行动:
public function loginAction()
{
$request = $this->getRequest();
$session = $request->getSession();
$user = new 'Symfony'Component'Security'Core'User'User('ana', 'anon');
$form = $this->createForm(new LoginForm(), $user);
// get the login error if there is one
if ($request->attributes->has(SecurityContext::AUTHENTICATION_ERROR))
{
$error = $request->attributes->get(
SecurityContext::AUTHENTICATION_ERROR
);
}
else
{
$error = $session->get(SecurityContext::AUTHENTICATION_ERROR);
$session->remove(SecurityContext::AUTHENTICATION_ERROR);
}
return $this->render(
'BattlemamonoMainBundle:Security:login.html.twig',
array(
// last username entered by the user
'last_username' => $session->get(SecurityContext::LAST_USERNAME),
'error' => $error,
'form' => $form->createView(),
)
);
}
核心User类中的属性是"username"answers"password",而不是_username和_password-它们需要匹配,或者您需要在表单生成器中指定属性名称映射以避免上述异常。
此建议适用于将表单映射到一般实体。