2

Zend Framework 2は、フルスタックにコミットすることなく、モジュールを簡単に使用できる「随意」設計を採用していると主張しています。優れたデータベースアクセス層が必要です。オンラインのドキュメントと推奨事項から、Zend\Dbの外観が気に入っています。Zend /Dbフォルダーを/libディレクトリーに配置しましたが、PHPにZend \ Db \ Adapter\Adapterクラスを認識させるのに問題があります。使用しようとすると、致命的なエラーが発生し続けます。

致命的なエラー:6行目の/home/username/public_html/test.phpにクラス'Zend \ Db \ Adapter\Adapter'が見つかりません

.htaccessでZF2_PATHを設定してみました。 SetEnv ZF2_PATH /home/username/public_html/lib/Zend

コードにインクルードパスを設定してみました: set_include_path( $_SERVER['DOCUMENT_ROOT'] . '/lib' . PATH_SEPARATOR . get_include_path() );

Zend\Loaderを明示的にロードしてインスタンス化しようとしました。

require_once 'lib/Zend/Loader/StandardAutoloader.php';
$zendLoader = new Zend\Loader\StandardAutoloader();
$zendLoader->register();

これらのどれも効果がありませんでした。Zend / Db / Adapter / Adapter.phpを明示的に要求しようとしましたが、表示されているエラーは修正されましたが、依存関係の1つで同じエラーが発生するため、実用的な解決策ではありません。

私はここで何が間違っているのですか?ZF2は、この種のモジュラー使用のために実際に設計されたものではありませんか、それとも何かが足りませんか?

編集:私は自分のオートロード関数を書くことでこれを機能させました:

function autoloader($class) {
    $path = explode('\\', $class);
    foreach ($path as $p) {
        $cp .= DIRECTORY_SEPARATOR . $p;
    }
    include __DIR__ . '/lib/' . $cp . '.php';
}
spl_autoload_register(autoloader);

この種の意味は理にかなっています-フレームワークの残りの部分なしでdbモジュールを使用している場合、フレームワークが自動ロードを実行することは期待できません-Zend\Loaderを手動でロードする理由がまだわかりません。問題を解決しませんでした。Zend \ Loaderのポイントの自動ロードを処理していませんか?とにかく、私は今のところ実行可能な解決策を持っていますが、より良い解決策があれば私はそれを聞いてみたいです。

4

1 に答える 1

6

作曲家をチェックすることを強くお勧めします。これにより、多数の最新のPHPライブラリ間の依存関係の管理と、自動ロードが非常に簡単になります。

たとえば、プロジェクトを開始していて、zend-dbを取り込もうとしていることがわかっている場合は、次のようにします。

$ mkdir myproject
$ cd myproject
$ curl -s https://getcomposer.org/installer | php   
$ ./composer.phar require zendframework/zend-db:2.1.1

その最後の行により、作曲家が行動を起こします。管理するすべてのライブラリを保持する「ベンダー」と呼ばれるディレクトリを作成します。次に、そこにあるzend-dbのバージョン2.1.1をチェックアウトし、プロジェクトで必要となるvendor/autoload.phpを設定します。

次に、それをテストできます。次のようにmyproject/index.phpを作成します。

<?php
require_once "vendor/autoload.php";

$adapter = new Zend\Db\Adapter\Adapter(array(
   'driver' => 'Pdo_Sqlite',
   'database' => 'path/to/sqlite.db'
));

そしてそれはうまくいきます。

後で、Zend \ Mailも必要だと判断した場合は、次のようにします。

$ ./composer.phar require zendframework/zend-mail:2.1.1

そしてcomposerは、いくつかの依存関係とともにそれをインストールし、オートローダーが利用できることを確認します。

ComposerもZF固有ではありません。探索するコードのエコシステム全体があります。 Packagistは始めるのに良い場所です。

于 2013-02-09T21:32:44.260 に答える