9

での使い方がわかりませ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());

これは単にスローします:

Fatal error: Uncaught exception 'InvalidArgumentException' with message 'Identifier "security.authentication_providers" is not defined.'

ドキュメントによると、リクエストの処理以外のセキュリティ機能にアクセスする場合は、呼び出す必要があります$app->boot();が、これは私の状況ではありません。前
に呼び出しても例外は発生しませんが、ログイン フォームの生成時に Twig がスローするため、おそらくまったく起動しません。$app->boot();$app->register(...)

Unable to generate a URL for the named route "_admin_login_check" as such route does not exist.

おそらく同じ問題で数か月前に問題がありますが、クローズされているので、今すぐ修正する必要があると思います

4

3 に答える 3

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__),
));

上記のコードは問題を解決しているようですが、少なくとも 1 つの認証プロバイダーを追加する必要があります。

于 2014-01-04T18:51:09.700 に答える
12

SecurityServiceProviderの前にを登録しようとすると、同じ例外が発生していましたTwigServiceProvider

登録順序を変更しただけで(Security after 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());
于 2013-12-23T18:07:18.537 に答える