我正在用 zf2 和 zfcuser 模块做一个带有 doctrine 的项目。我创建了一个自定义用户模块来扩展 zfcuser,也是用户表的自定义实体,并为集成进行了所有必要的更改。但我的问题是在尝试验证自己时,出现此错误:
An alias "ZendDbAdapterAdapter" was requested but no service could be found.
当zfcuser_user_mapper尝试更改适配器时,会发生这种情况。
注意:我不太清楚为什么我需要使用 Zend \ Db \ 适配器 \ 适配器,因为我正在研究学说。
这是自定义用户模块的模块.php中的代码。
public function getServiceConfig() {
return [
'aliases' => array(
'zfcuser_zend_db_adapter' => 'ZendDbAdapterAdapter',
),
'factories' => [
'usuario_login_form' => 'UsuarioFactoryFormLogin',
'usuario_registro_form' => 'UsuarioFactoryFormRegister',
'usuario_user_service' => 'UsuarioFactoryServiceUserFactory',
//'usuario_user_mapper' => 'UsuarioFactoryMapperUser',
'usuario_auth_service' => 'UsuarioFactoryAuthenticationService',
'UsuarioAuthenticationAdapterDb' => 'UsuarioFactoryAuthenticationAdapterDbFactory',
'UsuarioAuthenticationStorageDb' => 'UsuarioFactoryAuthenticationStorageDbFactory',
//'ZendDbAdapterAdapter' => 'ZendDbAdapterAdapter',
'usuario_user_mapper' => function ($sm) {
$mapper = new MapperUser();
$mapper->setDbAdapter($sm->get('zfcuser_zend_db_adapter'));
$mapper->setEntityPrototype(new ORMEntityUsuarios());
$mapper->setHydrator(new ZfcUserMapperUserHydrator());
return $mapper;
},
]
];
}
这是我的全局.php文件
return array(
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' => 'DoctrineDBALDriverPDOMySqlDriver',
'params' => array(
'host' => 'localhost',
'port' => '3306',
'user' => 'root',
'password' => 'toor',
'dbname' => 'deporte',
)
)
)
),
);
这是我的模块.php文件:
'controllers' => array(
),
'doctrine' => array(
'driver' => array(
// overriding zfc-user-doctrine-orm's config
'usuario_entity' => array(
'class' => 'DoctrineORMMappingDriverAnnotationDriver',
'paths' => __DIR__ . '/../src/Usuario/ORM/Entity',
),
'orm_default' => array(
'drivers' => array(
'UsuarioORMEntity' => 'usuario_entity',
),
),
),
),
'zfcuser' => array(
'auth_adapters' => array(100 => 'UsuarioAuthenticationAdapterDb'),
// telling ZfcUser to use our own class
'user_entity_class' => 'UsuarioORMEntityUsuarios',
// telling ZfcUserDoctrineORM to skip the entities it defines
'enable_default_entities' => false,
),
我感谢您的帮助,我已经遇到此错误好几天了。非常感谢,请原谅我的英语。
如果要更改实体并要使用实体,请使用以下步骤:如果 zfcuser.global.php 文件放置在 config/autoload 文件夹中(如果没有,那么您可以从 zfcuser 模块复制 if。
在此全局文件中,搜索"user_entity_class"键并定义自己的实体类。默认情况下,它使用
'user_entity_class' => 'ZfcUserEntityUser',
就像我将其用于员工实体一样
'user_entity_class' => 'EmployeeEntityEmployee',
在此实体中,您需要实现用户界面。
use ZfcUserEntityUserInterface;
/**
* Employee
*
* @ORMTable(name="employee")
* @ORMEntity(repositoryClass="EmployeeRepositoryEmployeeRepository")
*/
class Employee implements UserInterface {
}
如果要覆盖数据库适配器,则需要执行以下步骤:
'service_manager' => array(
'invokables' => array(
'ZfcUserAuthenticationAdapterDb' => 'EmployeeAuthenticationAdapterDb',
),
),
在此文件中,您需要扩展和实现。
namespace EmployeeAuthenticationAdapter;
use InvalidArgumentException;
use ZendAuthenticationResult as AuthenticationResult;
use ZendCryptPasswordBcrypt;
use ZendServiceManagerServiceManager;
use ZendServiceManagerServiceManagerAwareInterface;
use ZendSessionContainer as SessionContainer;
use ZfcUserAuthenticationAdapterAdapterChainEvent as AuthenticationEvent;
use ZfcUserEntityUserInterface as UserEntity;
use ZfcUserMapperHydratorInterface as Hydrator;
use ZfcUserMapperUserInterface as UserMapper;
use ZfcUserAuthenticationAdapterAbstractAdapter;
use ZfcUserOptionsAuthenticationOptionsInterface as AuthenticationOptions;
class Db extends AbstractAdapter implements ServiceManagerAwareInterface
{
}
欲了解更多信息,您可以在此处关注zfcuser wiki:https://github.com/ZF-Commons/ZfcUser/wiki