Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/270.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何覆盖使用Symfony 3进行测试的用户提供程序?_Php_Symfony - Fatal编程技术网

Php 如何覆盖使用Symfony 3进行测试的用户提供程序?

Php 如何覆盖使用Symfony 3进行测试的用户提供程序?,php,symfony,Php,Symfony,我有以下安全措施。yml: security: # http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded providers: in_memory: memory: ~ bd_provider: entity: class: AppBundle:Usuario

我有以下安全措施。yml:

security:

    # http://symfony.com/doc/current/security.html#b-configuring-how-users-are-loaded
    providers:
        in_memory:
            memory: ~
        bd_provider:
            entity:
                class: AppBundle:Usuario
                property: email

    firewalls:
        # disables authentication for assets and the profiler, adapt it according to your needs
        dev:
            pattern: ^/(_(profiler|wdt)|css|images|js)/
            security: false

        main:
            anonymous: ~

            form_login:
                login_path: login
                check_path: login

            provider: bd_provider

            logout:
                path:   /logout
                target: /login
我正在通过以下方式验证Porpus的测试:

protected function createClientWithAuthentication()
{
    /* @var $client Client */
    $client = static::createClient();

    /* @var $user UserInterface */
    $user = $client->getContainer()->get('doctrine')->getRepository('AppBundle:Usuario')->find(5);

    $firewallName = 'main';
    $token = new UsernamePasswordToken($user, $user->getPassword(), $firewallName, $user->getRoles());
    $session = $client->getContainer()->get('session');
    $session->set('_security_' . $firewallName, serialize($token));
    $session->save();

    $cookie = new Cookie($session->getName(), $session->getId());
    $client->getCookieJar()->set($cookie);

    return $client;
}
但是我想使用不同的提供者进行测试,比如内存。因此,我在config_test.yml中添加了以下内容

security:
    providers:
        em_memoria:
            memory:
                users:
                    email@example.com:
                        password: senha
                        roles: 'ROLE_SUPER_ADMIN'

    encoders:
            AppBundle\Entity\Usuario: plaintext

    firewalls:
        main:
            provider: em_memoria
但是,当我更改将用户组装到以下位置的代码时:

$user = new Usuario();
$user
    ->setUsername('email@example.com')
    ->setPassword('admin')
    ->setRole('ROLE_USER_ADMIN');
这些测试将我发送到登录页面,就好像我使用了不正确的用户一样。我错过了什么?还有什么我该做的吗

如果需要其他信息,请告诉我,我会在这里提供


提前感谢。

您可以使用别名作为用户提供程序,并在不同的环境中引用不同的服务

firewalls:
    main:
        provider: app.user_provider
conf.yml:

services:
    app.user_provider:
       alias: bd_provider
conf_test.yml:

services:
    app.user_provider:
       alias: em_memoria

我无法让它工作,所以我在测试环境中将我的数据库配置为SQLite db。我还创建了一些DataFixture来加载初始数据,并在引导文件中调用了这些Fixture。

提供程序的定义必须与服务的定义位于同一文件中,否则我会收到以下错误:[Symfony\Component\DependencyInjection\Exception\InvalidArgumentException]无法将别名“app.user\u provider”替换为实际定义“bd\u provider”。[Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException]您请求了一个不存在的服务“bd\U provider”。我在这里编辑了一些代码,并执行了以下操作:我创建了一个类TestUserProvider并实现了返回用户的自定义提供程序。当我的测试提供程序被指定为
提供程序
列表中的第一个时,它会在我的测试中成功执行,但我无法再使用bd_提供程序,即使我在主防火墙下指定了
提供程序
密钥。