6

モジュールに 2 つのコントローラーがあり、どちらもユーザーがログインしているかどうかを確認する必要があります。ログイン コントローラーは、DbTable を使用してユーザーを認証し、ID をストレージに書き込みます。

>Zend\Authentication\AuthenticationService; を使用しています。$auth = 新しい AuthenticationService();

コントローラー関数内ですが、複数の pageAction() でインスタンスをインスタンス化します

このために、Module.phpに関数を書きました

次のように

public function getServiceConfig()
    {
        return array(
            'factories' => array(
                'Application\Config\DbAdapter' => function ($sm) {
                    $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                    return $dbAdapter;
                },
                 'Admin\Model\PagesTable' => function($sm){
                     $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                     $pagesTable = new PagesTable(new TableGateway('pages',$dbAdapter) );
                    return $pagesTable;
                },
                'Admin\Authentication\Service' => function($sm){
                    return new AuthenticationService();

                }
            ),
        );
    }

ご覧のとおり、毎回 new AuthenticationService() を返していますが、これは悪いと思います。既にインスタンス化されたサービスのインスタンスを取得する方法が見つからなかったか、このためにシングルトン クラスを作成する必要がありました。より深い説明を含むサンプル コード スニペットがあれば、高く評価され、感謝されることをお知らせください。

4

1 に答える 1

2

代わりにこれを試してください:

public function getServiceConfig()
{
    return array(
        'aliases' => array(
            'Application\Config\DbAdapter' => 'Zend\Db\Adapter\Adapter',
            'Admin\Authentication\Service' => 'Zend\Authentication\AuthenticationService',
        ),
        'factories' => array(
            'Admin\Model\PagesTable' => function ($serviceManager) {
                 $dbAdapter    = $serviceManager->get('Application\Config\DbAdapter');
                 $tableGateway = new TableGateway('pages', $dbAdapter);
                 $pagesTable   = new PagesTable($tableGateway);
                 return $pagesTable;
             },
        ),
    );
}

主にルート配列の「エイリアス」セクションに注意してください。他の変更は単なる表面的なものであり、提案した元の方法を実行することを好む場合があります (ファクトリを使用して Zend\Db\Adapter\Adapter インスタンスをエイリアシングする代わりに取得するなど)。それも)。

敬具、

伊勢

于 2012-12-07T18:20:42.750 に答える