请注意:这是ZF beta 1.我怀疑当前版本是否相同
我只是试图将依赖注入到我的一些类中。我以为我已经把它解决了,因为我已经管理了很多事情,例如将database configurations
,DB adapters
和auth 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',
),
),
),
),
);
谢谢,Dominic
答案 0 :(得分:0)
啊哈......我发现了为什么这不起作用。
虽然上面的配置是正确的,我正在定义我想要注入的内容......我实际上并没有使用相关对象的注入实例。
我想在使用'new thingy();'时DI会神奇地发现它有依赖关系,并在需要时应用它们但事实并非如此......
我需要做的事情......将thingy
类注入到我的UserMapper
类中,就像链一样,然后使用注入的实例而不是创建new
实例它没有注入任何东西。
像:
RegisterController
需要UserMapper
,因此请将其注入并使用该实例
UserMapper
需要Thingy
,因此请将其注入并使用该实例