Php Zend Framework 2使用我自己的库和命名空间

Php Zend Framework 2使用我自己的库和命名空间,php,zend-framework,zend-framework2,Php,Zend Framework,Zend Framework2,我正试图在ZF2中创建一个库,但确实发现它既单调又困难。我的库将用于对图像执行任务,无前端输出。在尽可能多地阅读之后,我完成了以下过程 创建: vendor/mycompany/mylibrary/library/mylibrary/mylibrary.php mylibrary.php的内容: <?php namespace mylibrary; class mylibrary { } 到composer.json Ran作曲家: `sudo php composer.pha

我正试图在ZF2中创建一个库,但确实发现它既单调又困难。我的库将用于对图像执行任务,无前端输出。在尽可能多地阅读之后,我完成了以下过程

  • 创建:

    vendor/mycompany/mylibrary/library/mylibrary/mylibrary.php
    
  • mylibrary.php的内容

    <?php
    
    namespace mylibrary;
    
    class mylibrary {
    
    }
    
    composer.json

  • Ran作曲家:

    `sudo php composer.phar update`
    
    没有错误,并且
    自动加载_名称空间。php
    使用新名称空间进行更新:

    return array(
        'mylibrary\\' => array($vendorDir . '/mycompany/mylibrary/library/mylibrary'),
        'Zend\\' => array($vendorDir . '/zendframework/zendframework/library'),
        'ZendXml' => array($vendorDir . '/zendframework/zendxml/library'),
        'ZendPdf\\' => array($vendorDir . '/zendframework/zendpdf/library'),
    );
    
  • 增加:

    "autoload": {
        "psr-0":  {"mylibrary\\":"vendor/mycompany/mylibrary/library/mylibrary/"}
    }   
    
    使用mylibrary

    IndexController.php

    并尝试实例化该类:

    public function indexAction()
    {
    
        $mylibrary = new mylibrary();
        // .... etc etc 
    
  • 我得到一个错误:

    Fatal error: Class 'mylibrary' not found in /the/root/to/my/site/module/Application/src/Application/Controller/IndexController.php on line 22
    
    请有人看看我做了什么,也许告诉我如何在没有这个错误的情况下实例化我的类


    提前感谢

    您不应该在
    供应商
    中手动创建文件。如果您希望能够与其他应用程序共享您的库,请创建该文件以及相应的
    composer.json
    。将库放在自己的源代码管理存储库中,然后使用composer将其安装到主应用程序中。

    简单的回答是您的mylibrary类位于mylibrary命名空间中,因此您的
    use
    语句应该更改以反映

    use mylibrary\mylibrary;
    
    另一种方法是在实例化类时省略use语句并使用FQCN

    $mylibrary = new \mylibrary\mylibrary();
    

    我建议您使用ZFTool创建一个新模块(这就是在ZF2中调用库的方式), 假设您使用的是Git,并且安装了GitBash,那么您可以执行以下操作

    • 克隆ZF2骨架,您将在此处获得说明

    • 将ZFTool依赖项添加到composer.json文件中

    • 运行php composer.phar更新

    • 要在项目中创建新模块,请从控制台、cd到项目根目录,然后运行

    ./vendor/bin/zf.php创建模块MyModule

    或键入-v以查看所有可用选项

    ./vendor/bin/zf.php-v

    这样,您的模块将以正确的结构创建,并自动注册到应用程序。它将在应用程序模块目录中创建

    • 为了确保一切正常,您可以创建一个简单的路由和控制器,因此打开您的zfsketone/module/YourNewModule/config/module.config.php并添加以下命令
    我没有测试此代码,可能包含错误或遗漏:/

    如前所述,从不编辑供应商目录中的任何内容,它包含由composer自动下载的依赖项

    如果愿意,您可以为您的模块创建一个新的repo,然后使用composer将其添加到ad依赖项中

    希望这有帮助

    "require": {
        "php": ">=5.3.3",
        "zendframework/zendframework": "2.3.*",
        "zendframework/zftool": "dev-master",
    },
    
    namespace MyNewModule; return array( 'view_manager' => array( 'template_path_stack' => array( __NAMESPACE__ => __DIR__ . '/../view', ), ), 'controllers' => array( 'invokables' => array( __NAMESPACE__ . '\Controller\Index' => __NAMESPACE__ . '\Controller\IndexController', ), ), 'router' => array( 'routes' => array( __NAMESPACE__ => array( 'type' => 'Literal', 'priority' => 1000, 'options' => array( 'route' => '/example', 'defaults' => array( 'controller' => __NAMESPACE__ . '\Controller\Index', 'action' => 'index', ), ), ), ), ), ); namespace MyNewModule\Controller; use Zend\Mvc\Controller\AbstractActionController, Zend\View\Model\ViewModel; class IndexController extends AbstractActionController { public function indexAction() { return new ViewModel(); } }
    http://yourSiteUrlOrVhost/example