我想在ZF2中开发自己的库,但是当我尝试使用自己的类时,我遇到了问题。
我在这个文件夹结构中创建了自己的类(SistemaData.php)
SistemasData.class
namespace Data;
class SistemasData{
public function __construct($log){
$log->info("Hola desde dentro del constructor!!!");
}
}
/Vendor/composer/autoload_namespaces.php
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'phpDocumentor' => array($vendorDir . '/phpdocumentor/reflection-docblock/src'),
'ZendXml' => array($vendorDir . '/zendframework/zendxml/library'),
'ZendDeveloperTools' => array($vendorDir . '/zendframework/zend-developer-tools/src'),
'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'),
'PHPExcel' => array($vendorDir . '/phpoffice/phpexcel/Classes'),
'Doctrine\\ORM\\' => array($vendorDir . '/doctrine/orm/lib'),
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src'),
'Doctrine\\DBAL\\' => array($vendorDir . '/doctrine/dbal/lib'),
'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib'),
'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib'),
'Doctrine\\Common\\Collections\\' => array($vendorDir . '/doctrine/collections/lib'),
'Doctrine\\Common\\Cache\\' => array($vendorDir . '/doctrine/cache/lib'),
'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib'),
'Doctrine\\Common\\' => array($vendorDir . '/doctrine/common/lib'),
'DoctrineORMModule\\' => array($vendorDir . '/doctrine/doctrine-orm-module/src'),
'DoctrineModule\\' => array($vendorDir . '/doctrine/doctrine-module/src'),
'Demo31\\' => array($vendorDir . '/Demo31')
);
FooController.php
use Data\SistemasData;
class FooController{
public function indexAction(){
$sistemas = new SistemasData($log);
}
}
错误
Class' Data \ SistemasData'找不到 /var/www/html/gnsys/module/Publico/src/Publico/Controller/ActividadesController.php
我做错了什么?
修改1:
按照Alex P的指示,我做了这些修改:
BubbleSort.class
namespace Sort;
class BubbleSort{
public function __construct($log){
$log->info("Hola desde dentro del constructor de BubbleSort!!!");
}
}
/Vendor/composer/autoload_namespaces.php
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'phpDocumentor' => array($vendorDir . '/phpdocumentor/reflection-docblock/src'),
'ZendXml' => array($vendorDir . '/zendframework/zendxml/library'),
'ZendDeveloperTools' => array($vendorDir . '/zendframework/zend-developer-tools/src'),
'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'),
'PHPExcel' => array($vendorDir . '/phpoffice/phpexcel/Classes'),
'Doctrine\\ORM\\' => array($vendorDir . '/doctrine/orm/lib'),
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src'),
'Doctrine\\DBAL\\' => array($vendorDir . '/doctrine/dbal/lib'),
'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib'),
'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib'),
'Doctrine\\Common\\Collections\\' => array($vendorDir . '/doctrine/collections/lib'),
'Doctrine\\Common\\Cache\\' => array($vendorDir . '/doctrine/cache/lib'),
'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib'),
'Doctrine\\Common\\' => array($vendorDir . '/doctrine/common/lib'),
'DoctrineORMModule\\' => array($vendorDir . '/doctrine/doctrine-orm-module/src'),
'DoctrineModule\\' => array($vendorDir . '/doctrine/doctrine-module/src'),
'Demo\\' => array($vendorDir . '/Demo/library')
);
结果是......
致命错误:Class' Sort \ BubbleSort'找不到 /var/www/html/gnsys/module/Publico/src/Publico/Controller/ActividadesController.php 在第31行
编辑2:
我已经运行了php composer.phar dumpautoload但它没有工作,但是这个过程删除了我添加的行。现在,我的autoload_namespaces.php:
$vendorDir = dirname(dirname(__FILE__));
$baseDir = dirname($vendorDir);
return array(
'phpDocumentor' => array($vendorDir . '/phpdocumentor/reflection-docblock/src'),
'ZendXml' => array($vendorDir . '/zendframework/zendxml/library'),
'ZendDeveloperTools' => array($vendorDir . '/zendframework/zend-developer-tools/src'),
'Prophecy\\' => array($vendorDir . '/phpspec/prophecy/src'),
'PHPExcel' => array($vendorDir . '/phpoffice/phpexcel/Classes'),
'Doctrine\\ORM\\' => array($vendorDir . '/doctrine/orm/lib'),
'Doctrine\\Instantiator\\' => array($vendorDir . '/doctrine/instantiator/src'),
'Doctrine\\DBAL\\' => array($vendorDir . '/doctrine/dbal/lib'),
'Doctrine\\Common\\Lexer\\' => array($vendorDir . '/doctrine/lexer/lib'),
'Doctrine\\Common\\Inflector\\' => array($vendorDir . '/doctrine/inflector/lib'),
'Doctrine\\Common\\Collections\\' => array($vendorDir . '/doctrine/collections/lib'),
'Doctrine\\Common\\Cache\\' => array($vendorDir . '/doctrine/cache/lib'),
'Doctrine\\Common\\Annotations\\' => array($vendorDir . '/doctrine/annotations/lib'),
'Doctrine\\Common\\' => array($vendorDir . '/doctrine/common/lib'),
'DoctrineORMModule\\' => array($vendorDir . '/doctrine/doctrine-orm-module/src'),
'DoctrineModule\\' => array($vendorDir . '/doctrine/doctrine-module/src'),
);
这条线怎么了?
'Demo\\' => array($vendorDir . '/Demo/library')
编辑3:
我不知道原因,但文件没有更改。现在是22h19'并且文件有一个不同的小时。
解决方案
我找到了解决方案。这些是要遵循的步骤:
创建所需的文件夹结构,例如:
创建我们的对象BubbleSort.php,例如:
namespace Sort;
class BubbleSort{
public function __construct($log){
$log->info("Hola desde dentro del constructor de BubbleSort!!!");
}
}
编辑项目内部的composer.json文件,并附加以下代码块:
"autoload":{
"classmap": ["vendor/Demo/library"]
}
在档案的最后。
componser.json
{
"name": "zendframework/skeleton-application",
"description": "Skeleton Application for ZF2",
"license": "BSD-3-Clause",
"keywords": [
"framework",
"zf2"
],
"homepage": "http://framework.zend.com/",
"require": {
"php": ">=5.5",
"zendframework/zendframework": "~2.5",
"zendframework/zend-developer-tools": "dev-master",
"doctrine/doctrine-module": "^0.9.0",
"doctrine/doctrine-orm-module": "^0.9.2",
"phpoffice/phpexcel": "^1.8"
},
"autoload":{
"classmap": ["vendor/Demo/library"]
}
}
下一步是运行php composer.phar dumpautoload。重要" dumpautoload"不更新项目的所有库!!!
最后,您可以进行一些测试,在控制器的indexAction中创建对象的实例,例如
FooController.php
use Sort\BubbleSort;
class FooController{
public function indexAction(){
$log = $this->getServiceLocator()->get("Zend/Log");
$a = new BubbleSort($log);
return new ViewModel();
}
}