わかりましたので、DoctrineのORMモジュールでZF2を使用しています
というモデルがありますProjectGateway.php
私の質問は、getServiceLocator()->
I get call to undefined class エラーを介してサービスロケーターにアクセスする方法です。
モデルはクラスを拡張する必要がありますか? いくつかのインポートがありませんか?
コントローラー経由でアクセスできます。
正しい方向への舵取りは大歓迎です。
わかりましたので、DoctrineのORMモジュールでZF2を使用しています
というモデルがありますProjectGateway.php
私の質問は、getServiceLocator()->
I get call to undefined class エラーを介してサービスロケーターにアクセスする方法です。
モデルはクラスを拡張する必要がありますか? いくつかのインポートがありませんか?
コントローラー経由でアクセスできます。
正しい方向への舵取りは大歓迎です。
これには 2 つの方法があります。
ServiceManager
、モデル クラスがそのクラスを実装していることを確認しますZend\Service\ServiceLocatorAwareInterface
。ServiceManager
。Controller
。_方法 1:
// module.config.php
<?php
return array(
'service_manager' => array(
'invokables' => array(
'ProjectGateway' => 'Application\Model\ProjectGateway',
)
)
);
ServiceLocatorAwareInterface
モデルがとそのメソッドを実装していることを確認してください。
namespace Application\Model;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class ProjectGateway implements ServiceLocatorAwareInterface
{
protected $serviceLocator;
public function setServiceLocator(ServiceLocatorInterface $serviceLocator) {
$this->serviceLocator = $serviceLocator;
}
public function getServiceLocator() {
return $this->serviceLocator;
}
}
コントローラーから、次のようにして取得できるようになりProjectGateway
ました。
$projectGateway = $this->getServiceLocator->get('ProjectGateway');
ProjectGateway
したがって、次の手順を実行して、クラスで ServiceManager を使用できるようになりました。
public function someMethodInProjectGateway()
{
$serviceManager = $this->getServiceLocator();
}
UPDATE 04/06/2014:方法 2:
基本的に、モデルに必要なのは、ServiceManager
以下に示す方法 1 に示すように、のゲッター/セッターです。
namespace Application\Model;
use Zend\ServiceManager\ServiceLocatorAwareInterface;
use Zend\ServiceManager\ServiceLocatorInterface;
class ProjectGateway implements ServiceLocatorAwareInterface
{
protected $serviceLocator;
public function setServiceLocator(ServiceLocatorInterface $serviceLocator) {
$this->serviceLocator = $serviceLocator;
}
public function getServiceLocator() {
return $this->serviceLocator;
}
}
次に、他の場所(たとえば a )から行う必要があるのは、そこにあるController
を解析するServiceManager
ことだけです:
namespace Application\Controller;
use Zend\Mvc\Controller\AbstractActionController;
use Application\Model\ProjectGateway;
class SomeController extends AbstractActionController
{
public function someAction()
{
$model = new ProjectGateway();
// Now set the ServiceLocator in our model
$model->setServiceLocator($this->getServiceLocator());
}
}
それ以上のことはありません。
ただし、方法 2 を使用するとProjectGateway
、アプリケーション全体でオンデマンドでモデルをすぐに利用できないことを意味します。ServiceManager
毎回インスタンス化して設定する必要があります。
ただし、最後の注意として、モデルは最初に呼び出す前にインスタンス化されないため、方法 1 は方法 2 よりもリソースがそれほど多くないことに注意する必要があります。