2

私のディレクトリ構造は次のようなものです:

  • c:\ワークスペース\Zend
  • c:\ワークスペース\カスタム ライブラリ

カスタム ライブラリは、他のアプリケーションで使用されている共有ライブラリです。名前空間は使用せず、古いスタイルのアンダースコアのみを使用します。

レストフル サーバーとして使用する予定の ZF2-Restful-Module-Skeleton をダウンロードしました。InfoController には、次のコードがあります。

namespace Main\Controller;

use Zend\Mvc\Controller\AbstractRestfulController;

class InfoController extends AbstractRestfulController
{
  public function getList()
  {
    $data = array(
        'phone'   => '+30123456789',
        'email'   => 'email@domain',
    );

    $Res = new CL_Res_Chain_Mutable();

    return $data;
  }
}

エラーメッセージは次のとおりです。

致命的なエラー: クラス 'Main\Controller\CL_Res_Chain_Mutable' が C:\Workspaces\Zend\module\Main\src\Main\Controller\InfoController.php に見つかりません

明らかに、このカスタム ライブラリを Zend アプリケーションに追加する必要がありますが、ここで "少し" 迷子になりました。私はいくつかの解決策をグーグルで検索しましたが、どれもこのようには見えません。

また、 folderc:\Workspaces\Custom library 2に別のライブラリがあり、(他のファイルの中でも) file(class) D.php があり、D::dump($data); のように使用しました。

そのような Zend アプリケーションで動作させるにはどうすればよいですか?

4

3 に答える 3

3

StandardAutoloaderライブラリ クラスをロードするには、 を構成する必要があります。最も簡単な方法は、アプリケーション モジュールのModule::getAutoloaderConfig()メソッドを次のように変更することです。

public function getAutoloaderConfig()
{
    return array(
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
            ),
            'prefixes' => array(
                'CL' => 'c:\\Workspaces\\Custom library/CL',
                'D' => 'c:\\Workspaces\\Custom library 2/D',
            ),
        ),
    );
}

キーを追加しprefixes、プレフィックス名とディスク上の場所をリストしました。Standard Autoloaderのドキュメントに詳細が記載されています。

Zend スケルトン アプリケーションを使用している場合は、これらの名前空間をinit_autoloader.phpファイルに追加するだけでもかまいません。

于 2013-02-19T08:20:55.373 に答える
2

クラスの名前空間はMain\Controller. ここで新しいクラスをインスタンス化すると、new CL_Res_Chain_Mutable()php はそれを現在の名前空間に相対的にロードしますMain\Controller\CL_Res_Chain_Mutable。クラスは名前空間付きのクラスではないため、ルートからロードする必要があります。\ を前に置くだけnew \CL_Res_Chain_Mutable()です。

于 2013-02-19T08:16:03.617 に答える
0

デフォルトでは、アプリケーションは Standard Autoloader (PSR-0) を使用します。これにより、名前空間と ZF2 で使用される命名規則に基づいてファイルが検索されます。ZF2 では、複数のオートローダーを登録できるため、さまざまな戦略を使用できます。これは、実行する必要があることです。以下に例を示します。

Module.php

/**
 * Get autoloader config
 * 
 * @return array
 */
public function getAutoloaderConfig()
{
    return array(
        'Zend\Loader\ClassMapAutoloader' => array(
            // File containing class map key/value pairs
            __DIR__ . '/library/autoloader_classmap.php',
            // Or provide an array with the class map instead...
            array( 
                'Application\Bootstrap' => __DIR__ . '/application/Bootstrap.php',
                'CL_Res_Chain_Mutable'  => __DIR__ . '/library/pathhere/Mutable.php',
            ),
        ),
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
            ),
        ),
    );
}

このセットアップでは、ZF2 にまずクラス マップをチェックするよう伝えます。探しているものが見つからない場合は、標準のオートローダーに戻ります。

http://framework.zend.com/manual/2.0/en/modules/zend.loader.class-map-autoloader.html

于 2013-02-19T08:57:24.407 に答える