2013-02-08 33 views
0

我希望爲使用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個問題:

  1. 用戶類需要我指定的用戶名和密碼,是不是我想要的。我希望這是一個登錄表單,而不是克里特用戶表單。

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

    您是否嘗試'username'而不是'_username'? – 2013-02-08 11:42:48

    +0

    剛剛起作用,但提出了一個新問題。 – NaGeL182 2013-02-08 11:43:25

    +0

    如果你經歷了這一切,它應該實際上工作http://symfony.com/doc/current/book/security.html – 2013-02-08 12:18:20

    回答

    1

    的屬性是核心用戶級 '用戶名' 和 '密碼',反對_username和_password - 他們需要匹配,否則您需要在表單構建器中指定屬性名稱映射以避免上述異常。

    此建議適用於將表單映射到實體的一般情況。

    +0

    是的,我剛剛那樣做,但我有一個新的問題..第一個問題仍然存在... – NaGeL182 2013-02-08 11:44:08