Интерфейс между двумя модулями 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);
}
}
Пример может быть не лучшим (вам не нужна такая связь, вы бы предпочли решать ее с помощью событий, вы бы использовали правильное внедрение зависимостей), но он просто показывает, как экземпляры могут быть разделены между модулями.