Интерфейс между двумя модулями Zend Framework

Есть ли способ создать интерфейсы между двумя модулями, чтобы они могли взаимодействовать друг с другом? Я работаю над Zend Framework2.

Большое спасибо.

1 ответ

Zend Framework 2 предлагает сервис-менеджер. Это позволяет вам зарегистрировать конкретную службу в диспетчере, где другие объекты могли бы использовать эти службы. Просто для примера, у вас есть модуль Blog и модуль Twitter. Когда вы публикуете новое сообщение в блоге, вы отправляете твит с помощью модуля Twitter.

Допустим, у вас есть класс сервиса Twitter, который имеет следующий интерфейс:

namespace TwitterModule\Service;

interface TwitterServiceInterface
{
    public function tweet($text);
}

class TwitterService implements TwitterServiceInterface
{
    // implementation
}

Теперь вы можете зарегистрировать этот сервис внутри module.config.php модуля Twitter:

'service_manager' => array(
    'invokable' => array(
        'TwitterService' => 'TwitterModule\Service\TwitterService'
    ),
),

Таким образом, любой модуль может "запросить" у менеджера сервиса "TwitterService", и менеджер сервиса вернет экземпляр TwitterModule\Service\TwitterService,

Итак, в вашем блоге модуль:

class BlogService
{
    public function store(array $data)
    {
        // create a $post, store it into DB

        // $sm is an instance of Zend\ServiceManager\ServiceManager
        $twitter = $sm->get('TwitterService');
        $tweet   = sprintf('Blogged: %s', $post->getTitle());
        $twitter->tweet($tweet);
    }
}

Пример может быть не лучшим (вам не нужна такая связь, вы бы предпочли решать ее с помощью событий, вы бы использовали правильное внедрение зависимостей), но он просто показывает, как экземпляры могут быть разделены между модулями.

Другие вопросы по тегам