我希望爲使用Default Symfony User類的登錄表單創建一個A Form類。默認的帶表格類的Symfony用戶實體
我這裏folowed書:http://symfony.com/doc/current/book/security.html#using-a-traditional-login-form
現在我希望把這一HTML intoa 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);
,現在我有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
我在做什麼錯:
當我嘗試呈現它拋出一個錯誤? 我不想使用FOSUserBundle,但是我想學習默認的Smyfony類,你可以稱我爲這個白癡。
編輯:我刪除從字段名的下劃線(_),並開始工作,但第一個問題仍然有效,現在我的GoTa新prblem:
如果我嘗試提交我的fomr我回來是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(),
)
);
}
您是否嘗試'username'而不是'_username'? – 2013-02-08 11:42:48
剛剛起作用,但提出了一個新問題。 – NaGeL182 2013-02-08 11:43:25
如果你經歷了這一切,它應該實際上工作http://symfony.com/doc/current/book/security.html – 2013-02-08 12:18:20