Silex SecurityServiceProvider抛出'Identifier'security.authentication_providers"未定义."

mar*_*tin 9 php symfony silex

我无法弄清楚如何使用SecurityServiceProviderSilex.我的配置是:

$app['security.firewalls'] = array(
    'admin' => array(
        'pattern' => '^/_admin/.+',
        'form' => array('login_path' => '/_admin/', 'check_path' => '/_admin/login_check'),
        'logout' => array('logout_path' => '/_admin/logout'),
        'users' => array(
            'admin' => array('ROLE_ADMIN', '5FZ2Z8QIkA7UTZ4BYkoC+GsR...'),
        ),
    ),
);
$app->register(new Silex\Provider\SecurityServiceProvider());
Run Code Online (Sandbox Code Playgroud)

这只是抛出:

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Identifier "security.authentication_providers" is not defined.'
Run Code Online (Sandbox Code Playgroud)

根据文档在某些情况下,当您要访问处理请求之外的安全功能时,您必须调用$app->boot();但这不是我的情况.
如果我$app->boot();之前调用$app->register(...)它没有引发任何异常但它可能根本不启动因为然后生成登录表单Twig抛出:

Unable to generate a URL for the named route "_admin_login_check" as such route does not exist.
Run Code Online (Sandbox Code Playgroud)

几个月前一个问题可能存在同样的问题,但它已关闭,所以我想现在应该修复它

agm*_*gas 12

我试图在SecurityServiceProvider之前注册时遇到了同样的异常TwigServiceProvider.

我刚刚更改了注册顺序(Twig 之后的安全性 ),一切都开始正常工作:

// Twig service

$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => sprintf("%s/../views", __DIR__),
));

// Security service

$app["security.firewalls"] = array();
$app->register(new Silex\Provider\SecurityServiceProvider());
Run Code Online (Sandbox Code Playgroud)


小智 12

您必须在SecurityServiceProvider注册和TwigServiceProvider注册之间启动您的应用程序:

// Security service
$app["security.firewalls"] = array();
$app->register(new Silex\Provider\SecurityServiceProvider());

// Boot your application
$app->boot();

// Twig service
$app->register(new Silex\Provider\TwigServiceProvider(), array(
    'twig.path' => sprintf("%s/../views", __DIR__),
));
Run Code Online (Sandbox Code Playgroud)

上面的代码似乎可以解决您的问题,但您必须至少添加一个身份验证提供程序.