具有表单类的默认Symfony用户实体

时间:2013-02-08 11:26:17

标签: php symfony symfony-2.1

我希望为使用Default Symfony User类的Login表单创建一个Form类。

我在这里写了这本书:http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form

现在我希望将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);

现在我遇到了两个问题:

  1. 用户类要求我指定一个不是我想要的用户名和密码。我希望这是一个登录表单,而不是克里特用户表单。

  2. 尝试渲染时会抛出错误:

    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
    
  3. 我做错了什么? 我还不想使用FOSUserBundle,我希望学习默认的Smyfony课程,你可以称我为白痴。

    编辑:我从字段名称中删除了下划线(_)并开始工作但第一个问题仍然存在,现在我遇到了一个新的问题:

    如果我尝试提交我的fomr,我会收到Bad credentials信用卡。

    login.html.twig:

    <form action="{{ path('main_login_check') }}" method="post">
        {{ form_widget(form) }}
    
        <button type="submit">login</button>
    </form>
    

    这是调用它的Action:

    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(),
                            )
                    );
        }
    

1 个答案:

答案 0 :(得分:1)

属性是核心User类中的'username'和'password',与_username和_password相对 - 它们需要匹配,或者您需要在表单构建器中指定属性名称映射以避免异常上方。

这个建议适用于将表格映射到一般的实体。