2015-07-11 47 views
1

在硅石使用实体SecurityUserProvider,我的身份验证的工作时,我用一个简单的UserProvider与学说ORM(只是DBAL):上的Silex

$app['security.firewalls']=array(
'app_secure' => array(
    'pattern' => '^/app/', 
    'form' => array(
     'login_path' => '/login', 
     'check_path' => '/app/login_check', 
     'always_use_default_target_path' => true, 
     'default_target_path' => '/app/' 
     ), 

    'logout' => array(
     'logout_path' => '/app/logout', 
     'target_url' => "/login", 
     'invalidate_session'=> "true" 
     ), 

    'users' => $app->share(function() use ($app) { 
     return new App\Service\UserProvider($app['db']); 
    }) 
), 
); 

在Silex的文档,我已阅读:

如果您使用Doctrine ORM,则Symfony为Doctrine提供了一个用户提供程序类,可以从您的实体加载用户。

于是我尝试用实体合作(与dflydev学说ORM服务提供商),但我找不到如何配置我的防火墙:

'users' => $app->share(function() use ($app) { 
      $em = $app['orm.em']; 
      return $em->getRepository('MyProject\Entity\User'); 
     }) 

该解决方案返回我一个错误:attempts a UserProvider

我的一个来源:https://groups.google.com/forum/#!topic/silex-php/k-0X-BdG6Zw

我做错了什么?

感谢

回答

2

As stated in the docs

的用户设置可以定义为返回一个实例UserProviderInterface

你必须确保用户信息库实现服务UserProviderInterface

为了使用一个学说(借此谨慎,我从来没有使用过它!),你安装DoctrineBridge(composer require symfony/doctrine-bridge 2.7),然后第一只需要配置Doctrine user provider

<?php 

$app['security.firewall'] = array(
    //... 
    'users' => function() use ($app) { 
    return new Symfony\Bridge\Doctrine\Security\User\EntityUserProvider($app['registry_manager'], 'MyProject\Entity\User'); 
    } 

请注意,您需要一个ManagerRegistry实例,您可以查看此registry manager provider或自行创建一个实例。

+0

您的回答和这(法语)解决了我的问题: http://prof.bpesquet.fr/tutoriel/developpement-php-moderne/#toc_51 –