2013-06-25 16 views
17

Ho seguito questa guida (http://socialsemanticweb.blogspot.com.au/2012/11/zend-framework-2-create-custom-library.html) ma non riesco a far visualizzare a Zend la mia libreria (messaggio di errore sotto).Come caricare una libreria personalizzata in Zend Framework 2?

Qualche idea cosa potrebbe essere sbagliato? grazie

mia struttura di cartelle

http://imgur.com/Uhhm3uk

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

mia autoload_namespaces.php (all'interno vendor \ compositore)

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

il mio application.config.php (Ho solo aggiunto la voce MyLibrary. ho provato con e senza di essa)

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

messaggio di errore senza l'aggiunta del modulo MyLibrary in application.config.php messaggio

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

errore con l'ingresso del modulo MyLibrary in 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 

risposta

19

Prima di tutto, non è un modulo, quindi è da aspettarsi il messaggio di errore che si ottiene aggiungendolo all'array dei moduli della configurazione dell'app.

La modifica di autoload_namespaces.php per aggiungere la libreria (già esistente) dovrebbe funzionare.

Detto questo, un modo più corretto è quello di aggiungere la chiave autoload al file composer.json root e fare la mappatura ci

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

Dopo aver fatto questo, dalla riga di comando di marcia composer.phar update, e sarà aggiungi automaticamente la tua libreria al file autoload_namespaces per te. Facendolo in questo modo significa che non devi modificare manualmente il file ogni volta che aggiorni le tue altre librerie con il compositore.

Per l'errore stesso

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

Sto indovinando che con caricamento automatico curato, sei solo manca una dichiarazione use nella classe DirectoryController

<?php 
namespace Directory\Controller; 

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

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

grazie. quello ha funzionato! – mrjayviper