1

私は 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 にその機能を実行させたいと思っています。これを機能させるにはどうすればよいですか?お返事ありがとうございます。

ジェームズ・イーストマン

4

2 に答える 2

0

Module.php で、名前の後に 2 行のコードを追加します。

namespace Helloworld; 

    use Zend\Mvc\ModuleRouteListener;
    use Zend\Mvc\MvcEvent;
于 2013-12-10T12:55:42.213 に答える