[英]how to share model between ZF2 modules
我是ZF2世界的初学者,遇到以下问题。
我正在编写浏览器游戏,并计划创建与游戏页面渲染(例如,Oveview页面,Buildings页面等)相关的主要MVC模块。 不同的页面由不同的页面\\控制器生成。 一切都很好。
但是我还计划添加一些引擎特定的模块,例如User,Planet,Queue,它们应该仅实现MVC的Model端(即无View,无Controller)。 只需实现模型即可访问数据库并与主要MVC页面模块共享数据库,从而渲染游戏页面。
我发明了将引擎特定的模块API放入serviceManager的方法,以便Page控制器可以访问它(猜测ZF2的通用方法)。 例如我有用户界面:
interface UserInterface
{
public function Create ();
public function Load ($player_id);
public function Login ();
public function Logout ();
}
和实现它的UserManager类:
class UserManager implements UserInterface
{
....
在我的\\ module \\ User \\ config \\ module.config.php文件中,添加了factory,该工厂与其他模块共享UserManager:
return array (
'service_manager' => array(
'factories' => array(
'UserManager' => function($sm) {
return new \User\UserManager ();
},
),
),
);
没关系。 现在,页面控制器可以通过滥用serviceManager来访问UserManager API:
$user = $this->getServiceLocator()->get('UserManager');
但是,如何在Controller外部的模块之间共享Module API?
例如,我的UserManager需要对PlanetManager进行一些操作。
换句话说,我需要很好的zend-way来实现跨模型的交互。 谢谢。
我不确定UserInterface
的设计(它看起来更像UserController
的API)。
不过,如果UserManager
依赖于PlanetManager
,则可以将其作为依赖项 注入 。
就像使用UserManager
一样,最简单的方法是创建一个新工厂。
PlanetManager
class PlanetManager
{
protected $userManager;
public function __construct(UserManager $userManager)
{
$this->setUserManager($userManager);
}
public function setUserManager(UserManager $userManager);
}
Module.php
return array (
'service_manager' => array(
'factories' => array(
'UserManager' => function($sm) {
return new \User\UserManager ();
},
'PlanetManager' => function($sm) {
$userManager = $sm->get('UserManager');
return new PlanetManager($userManager);
}
),
),
);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.