0

こんにちは、使用している別のモジュール (私が作成したもの) の別のクラス コントローラーのクラス コントローラーをインスタンス化しようとしていますが、次のメッセージが表示されるため実行できません。

クラス 'ZfCommons\Controller\MyAbstractActionController' が見つかりません .....

そして、それは私がコマンドを実行するときですuse ZfCommons\Controller\MyAbstractActionController;

MyAbstractActionController最初のコマンドのクラスを含むファイルは次のとおりです。

namespace ZfCommons\Controller;

PHPでrequireまたはincludeを行う必要があると思いますが、ZF2で作業するのはもっとエレガントな方法があると思います。

どうすればいいですか?多分私は何か間違ったものを使用しています。さらにコードを表示する必要がある場合は、コピーして貼り付けることができます。

4

1 に答える 1

1

オブジェクト(AuthServiceなど)のようなサービスを取得したいだけの場合は、それをサービスとして登録し(getAuthService()コントローラーを呼び出してからすでに登録している可能性があります)、ServiceLocatorを使用して取得するか、単体テストにさらに適しています。工場経由でコントローラーに注入します。ZfcUserを見て、それがどのように行われるかを確認することをお勧めします。

何らかの理由で、このハードコードされたアプローチ(フレームワークに対して実際に機能している)の使用を主張する場合は、自動ロードを正しく設定していないか、ZfCommonsモジュールがアクティブ化されていないと思います。

初め

アクティブ化されたモジュールについては、application.config.phpを確認してください。ZfCommonsとApplicationは、少なくともアクティブ化する必要があります。

2番

オートローダーの初期化については、ZfCommonsのModule.phpを確認してください。

<?php
namespace ZfCommons;

use Zend\ModuleManager\Feature\AutoloaderProviderInterface;
use Zend\Loader\StandardAutoloader;

class Module implements AutoloaderProviderInterface,
{
    // snip

    /**
     * {@inheritDoc}
     */
    public function getAutoloaderConfig()
    {
        return array(
            'Zend\Loader\StandardAutoloader' => array(
                'namespaces' => array(
                    __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
                ),
            ),
        );
    }

    // snip
}

これにより、名前空間ZfCommonsのクラス自動読み込みが初期化されます。

ファイル名がPSR-0に従ってクラスとインターフェイスに正しくマップされている場合は、これで機能するはずです。

于 2013-01-22T08:18:42.083 に答える