[英]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.