私は Zend Framework 2 の初心者であり、Michael Romer による書籍「Zend Framework 2 を使用した Web 開発」をガイドとして使用しています。私は第 5 章の終わりにいて、ClassMapAutoloader の主題が示されています。議論の結論は、私の Helloworld モジュールが -> のファイルとディレクトリ構造を持つようになったことです。
Module.php
autoload_classmap.php
autoload_function.php
autoload_register.php
config/
module.config.php
public/
images/
css/
js/
src/
Helloworld/
Controller/
IndexController.php
views/
Helloworld/
Index/
index.phtml
Classmap の自動ロードのセットアップが Module.php、autoload_classmap.php、autoload_function.php、autoload_register.php であることを対象のファイルに伝えることができる限り。これらのファイルの内容は、
Module.php ->
<?php
namespace Helloworld;
Class Module {
public function getAutoloaderConfig() {
return array(
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php'
),
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__
)
)
);
}
public function getConfig() {
return include __DIR__ . '/config/module.config.php';
}
}
autoload_function.php ->
<?php
return function ($class) {
static $classmap = null;
if ($classmap === null) {
$classmap = include __DIR_ . '/autoload_classmap.php';
}
if (!isset($classmap[$class])) {
return false;
}
return include_once $classmap[$class];
};
autoload_register.php ->
<?php
spl_autoload_register(include __DIR__ . '/autoload_function.php');
autoload_classmap.php ->
<?php
//require_once 'autoload_register.php';
return array();
これはすべて、autoload_classmap.php で空の配列が返された場合に機能しますが、本では例に require_once 'autoload_register.php'; があります。その行のコメントを外すと、次のエラーが表示されます->
エラーは -> [Tue Jun 18 16:29:20 2013] [error] [client 199.82.163.121] PHP Fatal error: Uncaught exception 'Zend\Loader\Exception\InvalidArgumentException' with message 'Map file provided does not return a地図。マップ ファイル: "/var/www/ZendApp/module/Helloworld/autoload_classmap.php"' in /var/www/ZendApp/vendor/zendframework/zendframework/library/Zend/Loader/ClassMapAutoloader.php:88\nスタック トレース:\ n#0 /var/www/ZendApp/vendor/zendframework/zendframework/library/Zend/Loader/ClassMapAutoloader.php(117): Zend\Loader\ClassMapAutoloader->registerAutoloadMap('/var/www/ZendAp...') \n#1 /var/www/ZendApp/vendor/zendframework/zendframework/library/Zend/Loader/ClassMapAutoloader.php(60): Zend\Loader\ClassMapAutoloader->
空の配列を返すと、Module.php の Module クラスの getAutoloaderConfig() がデフォルトで StandardAutoloader になるため、機能することはわかっていますが、なぜですか? この例では、ClassMapAutoloader にその機能を実行させたいと思っています。これを機能させるにはどうすればよいですか?お返事ありがとうございます。
ジェームズ・イーストマン