我是Zend 2的新手,正在尝试将我的Zend 1项目迁移到Zend 2.我的Zend 1项目中有一个Acl插件,我使用符号链接与几个应用程序共享。我现在想到我迁移到Zend 2我在Vendor文件夹中创建了自己的包。我下载了Skeleton项目并尝试添加我的插件:
在我的myname \ commons \ Acl中,我创建了./config并添加了带有内容的module.config.php
return array(
// added for Acl ###################################
' controller_plugins' => array(
'invokables' => array(
'WebAclPlugin' => 'WebAcl\Controller\Plugin\WebAclPlugin',
)
),
// end: added for Acl ###################################
);
当我跑步时,我得到:
致命错误:类' WebAcl \ Controller \ Plugin \ WebAclPlugin'在第170行的AbstractPluginManager.php中找不到
我做错了什么?
编辑:如果我在我的模块中指定了它可以运行的类图
'Zend\Loader\ClassMapAutoloader' => array(
__DIR__ . '/autoload_classmap.php',
)
但如果我使用" autoload"它不起作用
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
编辑2:这解决了问题:
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' *.str_replace("\\", "/", __NAMESPACE__),*
),
),
还是我想弄清楚composer.phar实际上做了什么?请参阅其他问题:
其他问题:我读到我应该在composer.json中添加我的命名空间并运行composer.phar update,它会将其添加到auto_namespace。我这样做了,但是当我在模块中指定它时,是否需要?对不起,如果我的问题被愚弄了。
答案 0 :(得分:0)
插件管理器将尝试使用new
加载该类,这将使注册的自动加载器尝试加载该类。如果没有可以加载此类的自动加载器,那么您将收到致命错误。
如果myname\commons\Acl
是ZF2模块或作曲家加载的包,你就不会说。
如果它是作曲家包,那么你需要添加:
"autoload": {
"psr-4": {
"WebAcl\\": "myname/commons/Acl/src/WebAcl"
}
}
到composer.json
,然后运行composer.phar dumpautoload
。
如果您希望myname / commons / Acl成为模块,则需要将Module.php
添加到myname/commons/Acl
,如下所示:
<?php
namespace WebAcl;
class Module
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
__NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__,
),
),
);
}
}
您现在需要告诉您的应用程序ModuleManager
在application.config.php
中加载此模块:
'WebAcl'
添加到'modules'
在'module_paths'
键中添加模块的路径:
'module_paths' => array(
'WebAcl' => "./vendor/myname/commons/Acl",
'./module',
'./vendor',
),
您必须这样做,因为没有像命名空间名称(WebApi)直接映射到磁盘上的路径名,就像./modules
目录中一样。
ModuleManager
现在应该找到您的模块,自动加载器应该能够在vendor/myname/commons/Acl/src/WebApi
内的WebAcl名称空间中自动加载任何文件。
当然,如果您不需要ZF2模块的任何其他功能,作曲家路线会更容易。