3

ZfcUserを認証モジュールとして設定します。モジュールは、すべてのアクションで再度定義する必要があるという事実を除いて、うまく機能します。

$sm = $this->getServiceLocator();
$auth = $sm->get('zfcuser_auth_service');
if ($auth->hasIdentity()) {
    fb($auth->getIdentity()->getEmail());
}
else return $this->redirect()->toRoute('zfcuser');

コードを構成に入れてみましたが、うまくいきませんでした。次に、Service Managerを確認しましたが、出てきた複数のバージョンすべてで正しく定義できませんでした。

これは私のModuleクラスのコードです:

public function getServiceConfig() {
    return array(
        'factories' => array(
            'Todo\Model\TodoTable' =>  function($sm) {
                $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                $table = new TodoTable($dbAdapter);
                return $table;
            },
        ),
    );
}

サービスを正しく設定するにはどうすればよいですか?

4

1 に答える 1

5

コントローラプラグインを検討しましたか?これにより、これらの6行を1回の呼び出しに凝縮できます。

それ以外の場合、別のより一般的なアプローチは、「ディスパッチ」イベントをアタッチするベースコントローラーを作成することです。Matthew Weier O'Phinneyは、このアプローチを示すブログ投稿を「イベント」の見出しの下にhttp://mwop.net/blog/2012-07-30-the-new-init.htmlと書いています。

public function setEventManager(EventManagerInterface $events)
{
    parent::setEventManager($events);

    $controller = $this;
    $events->attach('dispatch', function ($e) use ($controller) {

        if (is_callable(array($controller, 'checkIdentity')))
        {
            call_user_func(array($controller, 'checkIdentity'));
        }
    }, 100);
}


public function checkIdentity()
{
    // Existing ZfcUser code
}
于 2012-08-24T08:55:53.270 に答える