首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在Zend Framework2中加载自定义库?

如何在Zend Framework2中加载自定义库?
EN

Stack Overflow用户
提问于 2013-06-25 15:32:58
回答 1查看 12K关注 0票数 17

我一直在遵循这个指南(http://socialsemanticweb.blogspot.com.au/2012/11/zend-framework-2-create-custom-library.html),但是我无法让Zend看到我的库(下面的错误消息)。

你知道会出什么问题吗?谢谢

my folder structure

my MyLibraryController.php

代码语言:javascript
复制
<?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 (内部供应商\composer)

代码语言:javascript
复制
<?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条目。我尝试过使用和不使用它的)

代码语言:javascript
复制
<?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模块的情况下出现错误消息

代码语言:javascript
复制
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模块条目的错误消息

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-06-25 16:01:53

首先,它不是一个模块,所以将它添加到应用程序配置的模块数组中得到的错误消息是意料之中的。

编辑autoload_namespaces.php来添加库(就像你已经做的那样)应该是可行的。

也就是说,更正确的方法是将autoload密钥添加到根composer.json文件中,并在那里进行映射

代码语言:javascript
复制
{
    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": ">2.2.0rc1"
    },
    "autoload": {
        "psr-0": {"MyLibrary\\": "vendor/MyLibrary/library/"}
    }
}

之后,从命令行运行composer.phar update,它会自动将您的库添加到autoload_namespaces文件中。这样做意味着您不必每次使用composer更新其他库时都手动编辑文件。

错误本身

目录致命错误:在第17行的D:\work\eclipse\htdocs\directory\module\Directory\src\Directory\Controller\DirectoryController.php中找不到类‘

\\MyLibaryController’

我猜在处理了自动加载之后,您只是在DirectoryController类中遗漏了一条use语句

代码语言:javascript
复制
<?php
namespace Directory\Controller;

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

class DirectoryController extends MyLibraryController
{
    //..
}
票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17291600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档