Как получить объекты из слоя модели / сервиса
В приложении, которое мы разрабатываем, у нас есть Сервисы, Mappers и Entities. Мы не используем ORM. В приложении мы имеем Group
, GroupMember
& Member
юридические лица. GroupMember
сущность имеет groupId
, memberId
& memberAccess
свойства. memberAccess
поля говорит нам уровень доступа Member
в пределах Group
, Теперь нам нужно получить
- все
Groups
где член имеет определенный уровень доступа. (предоставляяmemberId
) - все
Groups
где член является членом вместе с его доступом. (предоставляяmemberId
) - все
Members
в группе с их доступом. (предоставляяgroupId
)
любые идеи, какие услуги должны использоваться для каждого из следующих. и как они будут взаимодействовать, чтобы получить конкретные данные.
1 ответ
1) MembershipMapper: реализуйте здесь свои запросы, возвращая массивы сущностей (посмотрите на ZfcBase\Mapper\AbstractDbMapper в качестве базового класса)
function getGroupsForMember($member, $access = null)
function getMembersForGroup($group, $access = null)
2) MembershipServive: в Module.php в разделе getServiceConfig вы добавляете эту службу в диспетчер служб. Используйте замыкание, чтобы создать новый MembershipService и добавить в него MembershipMapper. Функции groups/members, вероятно, будут просто прокси для картографа.
function setMembershipMapper($membershipMapper)
function getMembershipMapper()
function getGroupsForMember($member, $access = null)
function getMembersForGroup($group, $access = null)
3) Контроллер: внедрите свой MembershipService в ваш контроллер (вы можете сделать это так же, как создаете свои сервисы с закрытием). Затем вызовите методы службы.
Пример создания службы / картографа / контроллера в диспетчере сервисов / контроллеров (см. Module.php)
public function getServiceConfig()
{
return array(
'factories' => array(
'MembershipService' => function (Zend\ServiceManager\ServiceManager $sm) {
$service = new YourNS\Service\Membership();
$service->setMembershipMapper($sm->get('MembershipMapper'));
return $service;
},
'MembershipMapper' => function ($sm) {
$mapper = new \YourNS\Mapper\Membership();
return $mapper;
},
);
}
public function getControllerConfig()
{
return array(
'factories' => array(
'YourNS\Controller\Something' => function (Zend\Mvc\Controller\ControllerManager $cm) {
$controller = new YourNS\Controller\Something();
$controller->setMembershipService($cm->getServiceLocator()->get('MembershipService'));
return $controller;
},
}