2013-11-29 2 views
0

Я пытаюсь сделать авторизацию в первый раз, используя Twig и SecurityServiceProvider.Silex и SecurityServiceProvider

Я пытаюсь использовать код из documentation:

Регистрация:

$app['security.firewalls'] = array(
'admin' => array(
    'pattern' => '^/admin/', 
    'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check'), 
    'users' => array(
     'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC+GsReLf569mSKDsfods6LYQ8t+a8EW9oaircfMpmaLbPBh4FOBiiFyLfuZmTSUwzZg=='), 
    ), 
), 
); 

Контроллер:

$app->get('/login', function(Request $request) use ($app) { 
return $app['twig']->render('login.html', array(
    'error'   => $app['security.last_error']($request), 
    'last_username' => $app['session']->get('_security.last_username'), 
)); 
}); 

Twig:

<form action="{{ path('admin_login_check') }}" method="post"> 
{{ error }} 
<input type="text" name="_username" value="{{ last_username }}" /> 
<input type="password" name="_password" value="" /> 
<input type="submit" /> 
</form> 

А вот ошибка я получил: InvalidArgumentException: Идентификатор «security.last_error» не определен.

Почему?

+0

Вы проверили, есть ли какое-либо значение в первую очередь? Это может иметь значение только в том случае, если была ошибка, но вы ее эхом отзываете независимо. – gunnx

ответ

3

Проверьте, действительно ли вы зарегистрировали поставщика службы безопасности правильно. В документации полный пример «брандмауэров безопасности» был определен отдельно как массив без передней регистрационной части. После того, как вы добавили его, как мои коды ниже, ошибка должна исчезнуть.

$app->register(new Silex\Provider\SecurityServiceProvider(), array(
'security.firewalls' => array(
    'admin' => array(
     'pattern' => '^/admin/', 
     'form' => array('login_path' => '/login', 'check_path' => '/admin/login_check'), 
     'users' => array(
      'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC+GsReLf569mSKDsfods6LYQ8t+a8EW9oaircfMpmaLbPBh4FOBiiFyLfuZmTSUwzZg=='), 
     ), 
    ) 
) 
)); 

Кроме того, пожалуйста, обратите внимание, что вам нужно будет зарегистрировать два других поставщиков услуг, не указанных в документации пример для правильной работы.

$app->register(new Silex\Provider\SessionServiceProvider()); 
$app->register(new Silex\Provider\UrlGeneratorServiceProvider()); 
Смежные вопросы