簡體   English   中英

如何在ZF2模塊之間共享模型

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM