1

注意: これは ZF ベータ 1 でした。現在のリリースでも同じであるとは思えません。

一部のクラスに依存関係を注入しようとしていました。database configurationsを注入しDB adaptersたりauth adaptersUserMapperクラスに入れたりするなど、かなりの数のことですでに管理していたので、これはダウンしていると思いました。

私は他のいくつかのクラスで同じことをしようとしていましたが、なぜ私のクラスのように機能しなかったのかまったくわかりません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',
            ),
        ),
    ),
),
);

ありがとう、ドミニク

4

1 に答える 1

0

ああ...これが機能しない理由がわかりました。

上記の構成は正しく、何を何に注入するかを定義していますが...実際には、問題のオブジェクトの注入されたインスタンスを使用していませんでした。

「new thingy();」を使用するときに考えました そのDIは依存関係があることを魔法のように拾い上げ、必要に応じてそれらを適用しますが、そうではありません...

私が実際に行う必要があったのは、チェーンのようthingyにクラスをクラスに挿入しUserMapper、注入されたインスタンスを作成する代わりに、注入されたインスタンスを使用するnewことでした。

お気に入り:

RegisterControllerUserMapperそのインスタンス にそれを挿入して使用する必要UserMapperがあるThingy

于 2011-11-30T22:51:21.340 に答える