決めた。そう。モデルのクラスのタスクを解決するには、インターフェイス ServiceLocatorAwareInterface を実装する必要があります。したがって、インジェクション ServiceManager はモデルで自動的に発生します。前の例を参照してください。
アプリケーションのフォームやその他のオブジェクトについては、ここで提案されている適切なメソッドhttp://michaelgallego.fr/blog/?p=205基本クラス フォームを作成して、BaseForm を拡張し、ServiceManagerAwareInterface を実装して、そこからアプリケーションでそのフォームを継承することができます。 .
namespace Common\Form;
use Zend\Form\Form as BaseForm;
use Zend\ServiceManager\ServiceManager;
use Zend\ServiceManager\ServiceManagerAwareInterface;
class Form extends BaseForm implements ServiceManagerAwareInterface
{
/**
* @var ServiceManager
*/
protected $serviceManager;
/**
* Init the form
*/
public function init()
{
}
/**
* @param ServiceManager $serviceManager
* @return Form
*/
public function setServiceManager(ServiceManager $serviceManager)
{
$this->serviceManager = $serviceManager;
// Call the init function of the form once the service manager is set
$this->init();
return $this;
}
}
ServiceManager のオブジェクトを挿入するには、ファイル module.config.php のセクション service_manager に自動的に書き込む必要があります。
'invokables' => array(
'Album\Form\AlbumForm' => 'Album\Form\AlbumForm',
),
次に、コントローラーでフォームを作成して、
$form = $this->getServiceLocator()->get('Album\Form\AlbumForm');
フォームには、他の依存関係を許可するオブジェクト ServiceManager が含まれます。
ご協力ありがとうございます。