Silex和SecurityServiceProvider

时间:2013-11-29 15:40:32

标签: php silex

我正在尝试使用TwigSecurityServiceProvider首次进行自动曝光。

我正在尝试使用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'),
));
});

嫩枝:

<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”。

为什么?

1 个答案:

答案 0 :(得分: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());