Как получить объекты из слоя модели / сервиса

В приложении, которое мы разрабатываем, у нас есть Сервисы, Mappers и Entities. Мы не используем ORM. В приложении мы имеем Group, GroupMember & Member юридические лица. GroupMember сущность имеет groupId, memberId & memberAccess свойства. memberAccess поля говорит нам уровень доступа Member в пределах Group, Теперь нам нужно получить

  1. все Groups где член имеет определенный уровень доступа. (предоставляя memberId)
  2. все Groups где член является членом вместе с его доступом. (предоставляя memberId)
  3. все 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;
            },
}
Другие вопросы по тегам