2013-06-25 3 views
17

Я слежу за этим руководством (http://socialsemanticweb.blogspot.com.au/2012/11/zend-framework-2-create-custom-library.html), но я не могу заставить Zend увидеть мою библиотеку (сообщение об ошибке ниже).Как загрузить пользовательскую библиотеку в Zend Framework 2?

Любые идеи, что может быть неправильным? благодаря

моя структура папок

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; 
    } 
} 

мой autoload_namespaces.php (внутри поставщика \ композитор)

<?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', 

сообщения об ошибке без добавления MyLibrary модуля в application.config.php сообщения

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

ошибки с вхождением MyLibrary модуля в application.config .php

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 

ответ

19

Прежде всего, это не модуль, поэтому вы можете получить сообщение об ошибке, добавив его в массив модулей конфигурации приложения.

Редактирование autoload_namespaces.php, чтобы добавить вашу библиотеку (как у вас уже есть), должен работать.

Тем не менее, более правильный путь, чтобы добавить ключ autoload в файл composer.json корня и сделать отображение там

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

После выполнения этого из командной строки запуска composer.phar update, и он будет автоматически добавьте свою библиотеку в файл autoload_namespaces. Выполнение этого способа означает, что вам не нужно вручную редактировать файл каждый раз, когда вы обновляете другие библиотеки композитором.

Для самой ошибки

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

Я предполагаю, что с самозарядные позаботятся, вы просто отсутствует use заявление в своем классе DirectoryController

<?php 
namespace Directory\Controller; 

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

class DirectoryController extends MyLibraryController 
{ 
    //.. 
} 
+0

спасибо. это сработало! – mrjayviper