17

このガイド ( http://socialsemanticweb.blogspot.com.au/2012/11/zend-framework-2-create-custom-library.html ) に従っていますが、Zend にライブラリを表示させることができません (以下エラーメッセージ)。

何が間違っている可能性がありますか?ありがとう

私のフォルダ構造

http://imgur.com/Uhhm3uk

私の MyLibraryController.php

<?php

namespace MyLibrary\Mvc\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class MyLibraryController extends AbstractActionController {
    public function __construct() {
    }

    public function doSomething() {
        //instantiate your model here and return result
     $result = "test";
     return $result;
    }
}

my autoload_namespaces.php (vendor\composer 内)

<?php

// autoload_namespaces.php generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'Zend\\' => $vendorDir . '/zendframework/zendframework/library/',
    'ZendTest\\' => $vendorDir . '/zendframework/zendframework/tests/',
    'Symfony\\Component\\Console\\' => $vendorDir . '/symfony/console/',
    'Doctrine\\ORM' => $vendorDir . '/doctrine/orm/lib/',
    'Doctrine\\DBAL' => $vendorDir . '/doctrine/dbal/lib/',
    'Doctrine\\Common' => $vendorDir . '/doctrine/common/lib/',
    'DoctrineORMModule\\' => $vendorDir . '/doctrine/doctrine-orm-module/src/',
    'DoctrineORMModuleTest\\' => $vendorDir . '/doctrine/doctrine-orm-module/tests/',
    'DoctrineModule\\' => $vendorDir . '/doctrine/doctrine-module/src/',
    'DoctrineModuleTest\\' => $vendorDir . '/doctrine/doctrine-module/tests/',
    'MyLibrary\\' => $vendorDir . '/MyLibrary/library/',
);

my application.config.php (MyLibrary エントリのみを追加しました。それを使用して、または使用せずに試しました)

<?php
return array(
    // This should be an array of module namespaces used in the application.
    'modules' => array(
        'Application',
        'DoctrineModule',
        'DoctrineORMModule',
        'Directory',
        'Helpers',
    'MyLibrary',

application.config.php に MyLibrary モジュールを追加しないエラー メッセージ

Fatal error: Class 'Directory\Controller\MyLibaryController' not found in D:\work\eclipse\htdocs\directory\module\Directory\src\Directory\Controller\DirectoryController.php on line 17

application.config.php の MyLibrary モジュール エントリのエラー メッセージ

Fatal error: Uncaught exception 'Zend\ModuleManager\Exception\RuntimeException' with message 'Module (MyLibrary) could not be initialized.' in D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php:175 Stack trace: #0 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php(149): Zend\ModuleManager\ModuleManager->loadModuleByName(Object(Zend\ModuleManager\ModuleEvent)) #1 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php(90): Zend\ModuleManager\ModuleManager->loadModule('MyLibrary') #2 [internal function]: Zend\ModuleManager\ModuleManager->onLoadModules(Object(Zend\ModuleManager\ModuleEvent)) #3 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\EventManager\EventManager.php(468): call_user_func(Array, Object(Zend\ModuleManager\ModuleEvent)) #4 D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library in D:\work\eclipse\htdocs\directory\vendor\zendframework\zendframework\library\Zend\ModuleManager\ModuleManager.php on line 175
4

1 に答える 1

19

まず、これはモジュールではないため、アプリ構成の modules 配列に追加することによって得られるエラー メッセージは予期されるものです。

ライブラリを追加するための編集autoload_namespaces.phpは(すでに持っているように)機能するはずです。

つまり、より正しい方法は、autoloadキーをルート composer.json ファイルに追加し、そこでマッピングを行うことです。

{
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": ">2.2.0rc1"
    },
    "autoload": {
        "psr-0": {"MyLibrary\\": "vendor/MyLibrary/library/"}
    }
}

その後、コマンド ラインから run を実行するcomposer.phar updateと、ライブラリが autoload_namespaces ファイルに自動的に追加されます。そうすることで、composer で他のライブラリを更新するたびにファイルを手動で編集する必要がなくなります。

エラー自体に

致命的なエラー: 17 行目の D:\work\eclipse\htdocs\directory\module\Directory\src\Directory\Controller\DirectoryController.php にクラス 'Directory\Controller\MyLibaryController' が見つかりません

オートローディングが処理されていれば、クラスuse内のステートメントが欠落しているだけだと思いますDirectoryController

<?php
namespace Directory\Controller;

// be sure to use your library controller
use MyLibrary\Mvc\Controller\MyLibraryController;

class DirectoryController extends MyLibraryController
{
    //..
}
于 2013-06-25T08:01:53.157 に答える