1

請注意:這是ZF測試1.我懷疑這是當前版本ZF2依賴注入 - 注入表到類

一樣,我只是試圖依賴注入我的一些課程。我以爲我有這個問題,因爲我已經用很多東西來管理它,比如將database configurations,DB adaptersauth adapters注入到我的UserMapper課程中。

我試圖做一些與我的一些其他類,並根本無法工作爲什麼它只是不像我的UserMapper類一樣工作。現在我看到UserMapper類正被注入到一個控制器中,該控制器在配置文件的頂部爲其設置了一個別名。

所以我猜沒有通過使用控制器首先注入...我應該如何注入我的模型?我使用的是標準ZF2 Skeleton by EvanDotPro

我的模型是:

Application\Model\ 
Application\Model\DbTable 

我的配置目前看起來是這樣:

<?php 
return array(
'bootstrap_class' => 'Application\Bootstrap', 
'layout'   => 'layouts/layout.phtml', 
'di'    => array(
    'instance' => array(
     'alias' => array(
      'index'    => 'Application\Controller\IndexController', 
      'view'    => 'Zend\View\PhpRenderer' 
     ), 

     'Zend\View\HelperLoader' => array(
      'parameters' => array(
       'map' => array(
        'url' => 'Application\View\Helper\Url', 
       ), 
      ), 
     ), 

     'Zend\View\HelperBroker' => array(
      'parameters' => array(
       'loader' => 'Zend\View\HelperLoader', 
      ), 
     ), 

     'Application\Controller\IndexController' => array(
      'parameters' => array(
       'userMapper' => 'Application\Model\UserMapper', 
       'flashMessenger' => 'Zend\Mvc\Controller\Plugin\FlashMessenger' 
      ) 
     ), 

     'Application\Model\UserMapper' => array(
      'parameters' => array(
       'db' => 'Zend\Db\Adapter\PdoMysql', 
       'authAdapter' => 'Zend\Authentication\Adapter\DbTable', 
       'userTable' => 'Application\Model\DbTable\UserTable' 
      ) 
     ), 

     'Application\Model\DbTable\UserTable' => array(
      'parameters' => array(
       'config' => 'Zend\Db\Adapter\PdoMysql', 
      ) 
     ), 

      // Auth adapter 

     'Zend\Authentication\Adapter\DbTable' => array(
      'parameters' => array(
       'zendDb' => 'Zend\Db\Adapter\PdoMysql', 
       'tableName' => 'users', 
       'identityColumn' => 'username', 
       'credentialColumn' => 'password', 
       'credentialTreatment' => 'MD5(CONCAT(?,"OSalTyr$"))' 
      ) 
     ), 

     // DB Adapter 

     'Zend\Db\Adapter\PdoMysql' => array(
      'parameters' => array(
       'config' => array(
        'host' => 'localhost', 
        'username' => 'root', 
        'password' => '', 
        'dbname' => 'blahblah', 
       ), 
      ), 
     ), 

     // View 

     'Zend\View\PhpRenderer' => array(
      'parameters' => array(
       'resolver' => 'Zend\View\TemplatePathStack', 
       'options' => array(
        'script_paths' => array(
         'application' => __DIR__ . '/../views', 
        ), 
       ), 
       'broker' => 'Zend\View\HelperBroker', 
      ), 
     ), 

    ), 
), 

'routes' => array(
    'default' => array(
     'type' => 'Zend\Mvc\Router\Http\Regex', 
     'options' => array(
      'regex' => '/(?P<controller>[^/]+)(/(?P<action>[^/]+)?)?', 
      'spec'  => '/%controller%/%action%', 
      'defaults' => array(
       'controller' => 'error', 
       'action'  => 'index', 
      ), 
     ), 
    ), 
    'home' => array(
     'type' => 'Zend\Mvc\Router\Http\Literal', 
     'options' => array(
      'route' => '/', 
      'defaults' => array(
       'controller' => 'index', 
       'action'  => 'index', 
      ), 
     ), 
    ), 
), 
); 

感謝,多米尼克

回答

0

AHAH ...我發現爲什麼這不起作用。

雖然上面的配置是正確的,我正在定義我想要注入什麼......我實際上並沒有使用注入的有問題的對象實例。

我想在使用'new thingy();'該DI會奇蹟般地拿起它有依賴關係並在需要時應用它們,但這種情況並非如此......

我INFACT需要做的......是注入thingy類到我UserMapper類像一個鏈和然後使用注入的實例,而不是創建它的實例,而不注入其中的東西。

像:

RegisterController需要UserMapper所以它注入並使用該實例 UserMapper需要Thingy所以在注入並使用該實例