Php Zend Framework 2使用我自己的库和命名空间
我正试图在ZF2中创建一个库,但确实发现它既单调又困难。我的库将用于对图像执行任务,无前端输出。在尽可能多地阅读之后,我完成了以下过程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
vendor/mycompany/mylibrary/library/mylibrary/mylibrary.php
mylibrary.php的内容
:
<?php
namespace mylibrary;
class mylibrary {
}
到composer.json
`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到项目根目录,然后运行
- 为了确保一切正常,您可以创建一个简单的路由和控制器,因此打开您的zfsketone/module/YourNewModule/config/module.config.php并添加以下命令
"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