0

私はZF2の世界の初心者で、次の問題があります。

私はブラウザ ゲームを書いており、ゲーム ページのレンダリングに関連するメインの MVC モジュール (例: 概要ページ、建物ページなど) を作成する予定でした。異なるページは、異なる Page\Controllers によって生成されます。すべて順調です。

しかし、MVC のモデル側のみを実装する必要がある (View も Controller もありません)、いくつかのエンジン固有のモジュール (User、Planet、Queue など) を追加することも計画しました。Model を実装してデータベースにアクセスし、それをゲーム ページをレンダリングするメインの MVC ページ モジュールと共有するだけです。

エンジン固有のモジュール API を serviceManager に配置する方法を発明したので、ページ コントローラーはそれにアクセスできます (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 ファイルに、UserManager を他のモジュールと共有する factory を追加しました。

return array (
    'service_manager' => array(
        'factories' => array(
            'UserManager' => function($sm) {                
                return new \User\UserManager ();
            },
        ),
    ),
);

それは大丈夫。Page Controller は、 serviceManager を悪用して UserManager API にアクセスできるようになりました。

$user = $this->getServiceLocator()->get('UserManager');

しかし、 Module API を Controller 外のモジュール間で共有するにはどうすればよいですか?

たとえば、私の UserManager は PlanetManager でいくつかのアクションを実行する必要があります。

言い換えれば、クロスモデルの相互作用を実装するには、素晴らしい zend-way が必要です。ありがとう。

4

1 に答える 1

0

の設計については UserInterfaceよくわかりません ( の API のように見えますUserController)。

それでも、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);
            }
        ),
    ),
);
于 2013-11-12T09:15:02.323 に答える