2015-04-14 7 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 \ Controller \ LoginController :: loginAction()" требует что вы указываете значение аргумента «$ security» (потому что нет значения по умолчанию или потому, что после него есть необязательный аргумент ).

Что должно быть значением по умолчанию для этого аргумента? Я использую это правильно?

ответ

3

Прежде всего, вам не нужно передавать $ security в качестве аргумента. В строке, где вы используете безопасность, вам действительно нужно получить доступ к $ request и просмотреть его атрибуты для ошибки.

Во-вторых, я видел, как ты меченый вопрос, как симфони 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 в качестве аргумента. Код был взят (как показано ниже в моем сообщении) из документации. Честно говоря, я не знаю, почему запрос $ был оставлен там, я считаю, что это было просто забыто при обновлении документов для версий 2.6 и 2.7. – Artamiel