1

에 주입 표 참고 :이 ZF 베타 1이었다 나는이 난 그냥 내 수업의 일부에 종속성을 주입하려고 시도했습니다 현재 릴리스ZF2 의존성 삽입 (Dependency Injection) - 클래스

에 대해 동일 의심한다. 나는 이미 database configurations, DB adaptersauth adapters을 내 UserMapper 클래스에 주입하는 것과 같은 몇 가지 작업으로 이미 이것을 관리하고 있었기 때문에 이것을 생각했습니다.

다른 클래스와 동일한 작업을 수행하려고했는데 전혀 작동하지 않아서 내 UserMapper 클래스가 작동하지 않는 이유가 무엇인지 알 수 없었습니다. 이제 UserMapper 클래스가 설정 파일의 맨 위에 별칭이 설정된 컨트롤러에 주입되고있는 것을 볼 수 있습니다.

컨트롤러를 사용하여 처음으로 주입하지 않고도 추측 할 수 있습니다. 어떻게하면 모델에 주입 할 수 있습니까?

Application\Model\ 
Application\Model\DbTable 

내 설정은 현재 같은 같습니다 : I 표준 ZF2 Skeleton by EvanDotPro

내 모델에 사용하고,

<?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는 마술처럼 의존성이 있다는 것을 알아 차리고 필요할 때 적용합니다 ... 그러나

내가해야 할 일은 .... thingy 클래스를 체인과 같은 내 UserMapper 클래스에 주입하는 것입니다. 그런 다음 삽입 된 인스턴스를 사용하여 물건을 삽입하지 않고 new 인스턴스를 만드는 대신 사용하십시오.

처럼 :

RegisterControllerUserMapper 그래서 그것을 주입 그래서 그것을 주입 UserMapperThingy을 요구하는 인스턴스를 사용하고 인스턴스를 사용할 필요

관련 문제