我试图在ZF2中创建一个库,但发现它非常乏味和困难。我的库将用于对图像执行任务,没有前端输出。在尽可能多地阅读之后,我完成了以下过程。
-
创建:
vendor/mycompany/mylibrary/library/mylibrary/mylibrary.php
-
mylibrary.php
:的内容<?php namespace mylibrary; class mylibrary { }
-
添加:
"autoload": { "psr-0": {"mylibrary''":"vendor/mycompany/mylibrary/library/mylibrary/"} }
至CCD_ 2。
-
冉作曲:
`sudo php composer.phar update`
并且没有错误,并且
autoload_namespaces.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'), );
-
添加:
use 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
请有人看看我做了什么,也许告诉我如何在没有这个错误的情况下实例化我的类?
提前感谢
简单的答案是您的mylibrary类在mylibrary命名空间中,因此您的use
语句应该更改以反映。。。
use mylibrary'mylibrary;
另一种选择是在实例化类时省略use语句并使用FQCN
$mylibrary = new 'mylibrary'mylibrary();
我建议您使用ZFTool创建一个新模块(ZF2中就是这样调用库的),假设您使用的是Git,并且安装了Gitbash,则可以执行以下
-
克隆ZF2骨架,您将在此处获得说明https://github.com/zendframework/ZendSkeletonApplication
-
将ZFTool依赖项添加到composer.json文件
"require": { "php": ">=5.3.3", "zendframework/zendframework": "2.3.*", "zendframework/zftool": "dev-master", },
-
运行php composer.phar更新。
-
要在项目中创建一个新模块,请从控制台,cd到项目根目录并运行
/vendor/bin/zf.php创建模块MyModule
或键入-v查看所有可用选项
/vendor/bin/zf.php-v
这样,您的模块将以正确的结构创建,并自动注册到应用程序中。它将在应用程序模块目录中创建
- 为了确保一切正常,您可以创建一个简单的路由和控制器,因此打开YourZFSkeleton/module/YourNewModule/config/module.config.php并添加以下内容
命名空间MyNewModule;返回数组('view_manager'=>数组('template_path_stack'=>数组(__NAMESPACE__=>__DIR__.'//视图',),),"控制器"=>阵列("invokables"=>数组(__NAMESPACE__'''控制器''索引'=>__NAMESPACE__'''控制器''索引控制器',),),"路由器"=>阵列("routes"=>数组(__NAMESPACE__=>数组('type'=>'Literal',"优先级"=>1000,"options"=>数组('route'=>'/example','defaults'=>数组('控制器'=>__NAMESPACE__'''控制器''索引','action'=>'index',),),),),),);
以及模块的控制器目录中的IndexController.php
命名空间MyNewModule''Controller;使用Zend''Mvc''Controller''AbstractActionController,Zend''View''Model''ViewModel;类IndexController扩展AbstractActionController{公共函数indexAction(){返回new ViewModel();}}
和视图脚本MyNewModule/view/my-new module/index/index.phtml
你好,世界!
你可以在访问时看到它的作用
http://yourSiteUrlOrVhost/example
我没有测试这个代码,可能包含错误或遗漏:/
如前所述,从不编辑供应商目录中的任何内容,它包含由composer自动下载的依赖项。
如果你愿意,你可以为你的模块创建一个新的repo,然后使用composer添加它的广告依赖性。
希望这能有所帮助!
您不应该在vendor
中手动创建文件。如果您希望能够与其他应用程序共享库,请创建文件以及相应的composer.json
。将库放在自己的源代码管理存储库中,然后使用composer将其安装到主应用程序中。