Я опущу установку приложения Zend Framework 2 и установку модулей ZfcUser, BjuAuthorize, Doctrine2.
Перейдем сразу к созданию собственного модуля.
Создаем структуру модуля
/module/MyUser
/config
doctrineconnection.local.php.dist
module.config.php
/src
/MyUser
/Entity
Role.php
User.php
Module.php
Добавляем модуль в
/config/application.config.php.
doctrineconnection.local.php.dist настройки подключения Doctrine, нужен только если они не указаны где-то за пределами модуля.
Как правило настройки уже присутствуют в каталоге /config/autoload приложения.
return array(
'doctrine' => array(
'connection' => array(
'orm_default' => array(
'driverClass' => 'Doctrine\DBAL\Driver\PDOMySql\Driver',
'params' => array(
'host' => '127.0.0.1',
'port' => '3306',
'user' => 'dbuser',
'password' => '',
'dbname' => 'mydb'
)
)
)
)
);
MyUser/Module.php
class Module {
public function getConfig()
{
return include __DIR__ . '/config/module.config.php';
}
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
}
MyUser/config/module.config.php
return array(
'doctrine' => array(
'driver' => array(
// перектрываем настройки zfc-user-doctrine-orm
// используем AnnotationDriver
// и указываем путь к каталогу с классами модели
'zfcuser_entity' => array(
'class' => 'Doctrine\ORM\Mapping\Driver\AnnotationDriver',
'paths' => __DIR__ . '/../src/MyUser/Entity',
),
'orm_default' => array(
'drivers' => array(
'MyUser\Entity' => 'zfcuser_entity',
),
),
),
),
'zfcuser' => array(
// указываем, что ZfcUser должен использовать наш класс пользователя
'user_entity_class' => 'MyUser\Entity\User',
// указываем ZfcUserDoctrineORM игнорировать сущности по-умолчанию
'enable_default_entities' => false,
),
'bjyauthorize' => array(
// Using the authentication identity provider,
// which basically reads the roles from the auth service's identity
'identity_provider' =>
'BjyAuthorize\Provider\Identity\AuthenticationIdentityProvider',
'role_providers' => array(
// используем репозиторий объектов
// для загрузки ролей в ACL
'BjyAuthorize\Provider\Role\ObjectRepositoryProvider' => array(
'object_manager' => 'doctrine.entity_manager.orm_default',
// указываем наш класс для ролей
'role_entity_class' => 'MyUser\Entity\Role',
),
),
),
);
Создаем классы User и Role
Проще всего скопировать шаблоны классов из модуля bjy-authorize
/vendor/bjyoungblood/bjy-authorize/data/Role.php.dist
в
/module/MyUser/src/MyUser/Entity/Role.php
и
/vendor/bjyoungblood/bjy-authorize/data/User.php.dist
в
/module/MyUser/src/MyUser/Entity/User.php
в этим классах везде меняем пространство имен на наше
Mynamespace на MyUser\Entity
Проверяем
> vendor/bin/doctrine-module orm:validate-schema
[Mapping] OK - ...
[Database] FAIL - .....
Схема модели работает, осталось обновить базу данных (точнее создать таблицы)
> vendor/bin/doctrine-module orm:schema-tool:update --force
Updateing database schema...
Database schema updated successfully! "6" queries were executed
Теперь в базе данных имеем три таблицы
role
users
users_roles
Добавляем роли в таблицу
INSERT INTO `role`
(`id`, `parent_id`, `roleId`)
VALUES
(1, NULL, 'guest'),
(2, 1, 'user'),
(3, 2, 'moderator'),
(4, 3, 'administrator');