2013-06-25 2 views
17

Ich habe dieses Handbuch verfolgt (http://socialsemanticweb.blogspot.com.au/2012/11/zend-framework-2-create-custom-library.html), aber ich kann Zend nicht dazu bringen, meine Bibliothek zu sehen (Fehlermeldung unten).Wie lade ich eine benutzerdefinierte Bibliothek in Zend Framework 2?

Irgendwelche Ideen, was könnte falsch sein? Dank

meine Ordnerstruktur

http://imgur.com/Uhhm3uk

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

meine autoload_namespaces.php (innen Verkäufer \ Komponist)

<?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/', 
); 

meine application.config.php (Ich habe nur den Eintrag MyLibrary hinzugefügt. Ich habe versucht, mit und ohne es)

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

Fehlermeldung ohne MyLibrary Modul in 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 

Fehlermeldung mit MyLibrary Moduleintrag in application.config Hinzufügen .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 

Antwort

19

Zunächst einmal, Es handelt sich nicht um ein Modul, daher ist die Fehlermeldung zu erwarten, die Sie erhalten, wenn Sie es zum Modul-Array von app config hinzufügen.

Bearbeiten autoload_namespaces.php zum Hinzufügen Ihrer Bibliothek (wie Sie bereits) sollte funktionieren.

das gesagt ist, ein richtiger Weg ist, die autoload Schlüssel zu Ihrem Stamm composer.json Datei und führen Sie die Zuordnung dort

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

Nachdem ich, dass von der Kommandozeile composer.phar update, hinzufügen und es wird Fügen Sie Ihre Bibliothek automatisch zur Datei autoload_namespaces für Sie hinzu. Auf diese Weise müssen Sie die Datei nicht jedes Mal manuell bearbeiten, wenn Sie Ihre anderen Bibliotheken mit Composer aktualisieren.

Um den Fehler selbst

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

Ich vermute, dass mit autoloading gesorgt, du bist nur ein use Anweisung in Ihrer DirectoryController Klasse fehlt

<?php 
namespace Directory\Controller; 

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

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

Dank. das hat funktioniert! – mrjayviper