我正在尝试在ZF2中创建一个库,并且真的发现它既繁琐又困难。我的库将用于执行图像任务,无前端输出。尽可能多地阅读,我已经完成了以下过程。
创建:
vendor/mycompany/mylibrary/library/mylibrary/mylibrary.php
mylibrary.php
的内容:
<?php
namespace mylibrary;
class mylibrary {
}
添加了:
"autoload": {
"psr-0": {"mylibrary\\":"vendor/mycompany/mylibrary/library/mylibrary/"}
}
到composer.json
。
Ran作曲家:
`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
请有人看看我做了什么,也许可以告诉我如何在没有这个错误的情况下实例化我的课程?
提前致谢
答案 0 :(得分:1)
简短的回答是您的mylibrary类位于mylibrary命名空间中,因此应更改use
语句以反映...
use mylibrary\mylibrary;
另一种方法是省略use语句并在实例化类时使用FQCN
$mylibrary = new \mylibrary\mylibrary();
答案 1 :(得分:1)
我建议你使用ZFTool创建一个新模块(这是在ZF2中调用库的方式), 假设您正在使用Git并且安装了Git bash,则可以执行以下操作
克隆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 update。
要在项目中创建新模块,请从控制台cd到项目根目录并运行
./ vendor / bin / zf.php创建模块MyModule
或键入-v以查看所有可用选项
./ vendor / bin / zf.php -v
这样,您的模块将使用正确的结构创建并自动注册到应用程序。它将在应用程序模块目录中创建。
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', ), ), ), ), ), );
你的模块的控制器目录中的IndexController.php
namespace MyNewModule\Controller; use Zend\Mvc\Controller\AbstractActionController, Zend\View\Model\ViewModel; class IndexController extends AbstractActionController { public function indexAction() { return new ViewModel(); } }
视图脚本MyNewModule / view / my-new-module / index / index.phtml
Hello world!
您可以在访问
的行动中看到它http://yourSiteUrlOrVhost/example
我没有测试此代码,可能包含错误或遗漏:/
正如已经建议的那样,从不编辑供应商目录中的任何内容,它包含由作曲家自动下载的依赖项。
如果您愿意,可以为您的模块创建一个新的repo,然后使用composer将其添加到广告依赖项中。
希望这有帮助!
答案 2 :(得分:0)
您不应该在vendor
中手动创建文件。如果您希望能够与其他应用程序共享您的库,请创建文件以及相应的composer.json
。将库放在自己的源代码控制存储库中,然后使用composer将其安装到主应用程序中。