2015-04-14 63 views
0

我工作的這個方法:

public function loginAction(Request $request, Security $security) 
{ 
    $session = $request->getSession(); 
    $session->remove('admin_project_id'); 

    if ($security->has(Security::AUTHENTICATION_ERROR)) { 
     $error = $request->attributes->get(Security::AUTHENTICATION_ERROR); 
    } else { 
     $error = $session->get(Security::AUTHENTICATION_ERROR); 
     $session->remove(Security::AUTHENTICATION_ERROR); 
    } 

    return $this->render('PDOneBundle:Login:index.html.twig', 
     array_merge($this->defaultViewParams(), array(
      'last_username' => $session->get(Security::LAST_USERNAME), 
      'error'   => $error, 
      'include_sidebar' => false, 
      ) 
     ) 
    ); 
} 

但我得到這個錯誤時,它被稱爲:

控制器 「GroupDCA \ PDOneBundle \控制器\的LoginController ::在loginAction()」 要求您爲「$ security」參數 提供了一個值(因爲沒有默認值,或者因爲在此之後沒有可選的 參數)。

應該是什麼這樣的說法的默認值?我使用的方式是對的嗎?

回答

3

首先,你不需要通過$安全作爲參數。您使用安全性的行,您實際上必須訪問$ request並查看其錯誤的屬性。

其次,我看見您標記了一個問題,symfony的2.7和自版本@ 2.6引入登錄一個新的,短的路:

public function loginAction(Request $request) 
{ 
    $authenticationUtils = $this->get('security.authentication_utils'); 

    // get the login error if there is one 
    $error = $authenticationUtils->getLastAuthenticationError(); 

    // last username entered by the user 
    $lastUsername = $authenticationUtils->getLastUsername(); 

    return $this->render(
     'security/login.html.twig', 
     array(
      // last username entered by the user 
      'last_username' => $lastUsername, 
      'error'   => $error, 
     ) 
    ); 
} 

你可以閱讀從那裏這段代碼更採取:How to Build a Traditional Login Form

+0

外觀極好,良好的文檔也 – ReynierPM

+0

其中$ request變量得到這裏使用?如果Request $ request沒有作爲參數傳遞,函數的行爲是否相同? – Maximus2012

+0

是的,即使沒有將$ request作爲參數傳遞,該方法也會成功執行。代碼是從文檔中獲得的(如下文所示)。坦率地說,我不知道爲什麼$ request被注入到那裏,我相信它在更新2.6和2.7版本的文檔時被遺忘了。 – Artamiel

相關問題