1

主な質問はZF2に関するものですが、主なタスクはZF2をYiiに統合する方法です。

ZF1の場合は、必要なファイルを含めるだけです。ZF2の構造はもう少し複雑です。

特にServiceManagerモジュールをロードする必要があります。

私はそれを試しました:

$loader = new Zend\Loader\ClassMapAutoloader();
$loader->registerAutoloadMap(realpath(dirname(__FILE__) . '/lib/Zend/ServiceManager'));
$loader->register();

そしてエラーが発生しました:

Warning: include(/Project/lib/Zend/ServiceManager): failed to open stream: Invalid argument in /Project/lib/Zend/Loader/ClassMapAutoloader.php on line 186

Warning: include(): Failed opening '/Project/lib/Zend/ServiceManager' for inclusion (include_path='/Project/lib:.:/usr/local/zend/share/ZendFramework/library:/usr/local/zend/share/pear') in /Project/lib/Zend/Loader/ClassMapAutoloader.php on line 186

Fatal error: Uncaught exception 'Zend\Loader\Exception\InvalidArgumentException' with message 'Map file provided does not return a map. Map file: "/Project/lib/Zend/ServiceManager"' in /Project/lib/Zend/Loader/ClassMapAutoloader.php:88
Stack trace:
#0 /Project/index.php(14): Zend\Loader\ClassMapAutoloader->registerAutoloadMap('/Project/...')
#1 {main}
  thrown in /Project/lib/Zend/Loader/ClassMapAutoloader.php on line 88

ドキュメントによると、前にconfig配列に名前空間の説明を設定する必要がありますか?

誰かが例を挙げてもらえますか?モジュールを1つだけ含める方法を教えてください。

更新1:

また、私はこれを試しました:

require_once 'Zend/Loader/StandardAutoloader.php';

$l = new Zend\Loader\StandardAutoloader();
$l->registerPrefix('Zend', realpath(dirname(__FILE__) . '/lib/Zend/') );
$l->register();

できます。その後、私は電話しました:

use Zend\Debug;
Zend\Debug::dump($l);

これにより、エラーが発生します。

Fatal error: Class 'Zend\Debug' not found in ...

更新2:

このコードは私のために働きます:

require_once 'Zend/Loader/StandardAutoloader.php';

$l = new Zend\Loader\StandardAutoloader();
$l->registerNamespace('Zend', realpath(dirname(__FILE__) . '/lib/Zend'));
$l->registerPrefix('Zend', realpath(dirname(__FILE__) . '/lib/Zend') );
$l->register();

これで、プロジェクトのどこにでもZendライブラリを含めることができます。とにかく私は他の解決策を見てうれしいです

4

2 に答える 2

2

ZF2 の通常の領域外にあるスクリプトがいくつかあり、フレームワークのランダム関数を使用する必要があります。私が見つけた単純な解決策は次のとおりです。

chdir(dirname(__DIR__));

require_once 'init_autoloader.php';

\Zend\Mvc\Application::init(require_once 'config/application.config.php');

これらのファイルは ZF2 Skeleton アプリに標準で付属しているため、特別なことは何もありません。

これで、任意の ZF2 関数を使用できます。

于 2013-03-04T13:52:23.913 に答える
2

少しハックなので、提案されたソリューションに反対することをお勧めします。ZF2 の優れた点の 1 つは、依存関係を明示的に定義できるため、アプリケーションが依存関係と簡単に対話できることです。したがって、composer を介して依存関係として Yii をインストールできます。

"yiisoft/yii": "dev-master"

Composer を介してインストールすると、クラス オートローダーは Yii フレームワークへの参照で更新されます。したがって、FQCN を介してこれらのファイルにアクセスできます。つまり、次のようになります。

use Yii\Path\To\Class as YiiClass;

...

$yii = new YiiClass();

または:

$yii = new \Yii\Path\To\Class();

また、Composer を使用すると、最新リリースを最新の状態に保つことができます (composer スクリプトを再実行するだけで、すべてが自動的にインストールされます)。

于 2013-03-02T15:22:52.430 に答える