編集:この質問を投稿してから数週間後、Evan Coury が ZF2 ServiceManager のトピックに関する優れたブログ投稿を書きました。 -zend-framework-2-servicemanager
--
ZendFramework 2.0.0beta4 を使用するプロジェクトに取り組んでおり、Zend\ServiceManager を使用して依存関係を処理するのに問題があります。現在のZF2 ServiceManager のドキュメントは次のとおりです。
モジュールで使用するクラスを ServiceManager に登録するときに使用する 6 つのサブキーをリストします: abstract_factories、aliases、factory、invokables、services、およびshared。データベースからデータを取得するためにコントローラーで使用するモデル クラスを登録したいだけの場合、どれが最適ですか? 具体的には、以下に示すZF2 スケルトン アプリケーションの例を自分のアプリケーション (DashboardTable がモデル)に適合させようとしています。この例では、ファクトリの方法を使用しています。
public function getServiceConfiguration()
{
return array(
'factories' => array(
'album-table' => function($sm) {
$dbAdapter = $sm->get('db-adapter');
$table = new DashboardTable($dbAdapter);
return $table;
},
'test-model' => Dashboard\Model\TestModel(),
),
);
}
ただし、「db-adapter」が、SkeletonApplication とは別の作業例で ServiceManager ($sm) にどのように取り込まれているかはわかりません。 DB 情報を含む db' エントリ。構成ファイルから ServiceManager にどのように到達するのか正確にはわからないため、その下に単純なエントリを作成して、問題をその基本コンポーネントである「test-model」に減らしました。「dashboard-table」エントリをコメントアウトし、コントローラーで TestModel から関数を呼び出すと、単純にテキストが出力されます。以下は、私の Module.php の ServiceManager 構成です。
<?php
namespace Dashboard\Model;
class TestModel {
public function testMethod()
{
$testResult = "Hello";
return $testResult;
}
}
次に、コントローラーからビューに渡されます。
<?php
namespace Dashboard\Controller;
use Zend\Mvc\Controller\ActionController;
use Zend\View\Model\ViewModel;
use Dashboard\Model\AlbumTable;
use Dashboard\Model\TestModel;
use Dashboard\Model\Dashboard;
class DashboardController extends ActionController
{
public function indexAction()
{
return new ViewModel(array(
'users' => $this->getTestModel()->testMethod(),
));
}
public function getAlbumTable()
{
if (!$this->albumTable) {
$sm = $this->getServiceLocator();
$this->albumTable = $sm->get('album-table');
}
return $this->albumTable;
}
public function getTestModel()
{
if (!$this->testModel) {
$sm = $this->getServiceLocator();
$this->testModel = $sm->get('test-model');
}
return $this->testModel;
}
}
このコードにより、エラーのない完全に空白のページが表示されます。Module.php から ServiceManager 構成をコメントアウトし、DashboardController.php ファイルに引数を渡さずに新しい ViewModel をレンダリングすると、ページは正常にレンダリングされます - layout.phtml と index.phtml をロードします。
ServiceManager または ZF2 の一般的な使用方法の基本的な部分を誤解していると思います。これは StackOverflow に関する私の最初の質問でもあるため、質問の書式設定に関するアドバイスを歓迎します。ありがとう。