我在ZF2中创建了一个简单的应用程序。在某些时候,我决定创建一组新的功能,所以我用这种方式创建了一个新文件夹:
module
Application
src
Application
Controller
IndexController.php
Issue
Controller
FooController.php
IndexController具有命名空间Application\Controller
并且操作正常工作但是当我尝试从FooController(命名空间Issue\Controller
)运行操作时,它会抛出Class 'Issue\Controller\FooController'
。当然,我已经在配置中设置了routes
和controllers
(没有它,无论如何它都抛出了404)。
答案 0 :(得分:0)
问题在于src
中的文件夹名称应与模块的文件夹名称相对应。我认为这与ZF2中的自动加载命名空间魔法有关。
所以像@Demo建议你需要这样做:
module
Application
src
Application
Controller
IndexController.php
Issue
src
Issue
Controller
FooController.php
或者这个:
module
Application
src
Application
Controller
IndexController.php
FooController.php
详细了解主题here at this question on StackOverflow
详细了解如何正确设置模块,通过autoLoaderConfig
和module.php
命名惯例here in the ZF2 user-guid中的PSR-0
正确自动加载
答案 1 :(得分:0)
这确实是一个自动加载问题(但没有魔法)。 您可以像这样注册您的命名空间(只是一个简单的例子):
<?php
namespace Application;
use Zend\Mvc\ModuleRouteListener;
use Zend\Mvc\MvcEvent;
class Module
{
public function getAutoloaderConfig()
{
return array(
'Zend\Loader\StandardAutoloader' => array(
'namespaces' => array(
'Application' => __DIR__ . '/src/Application',
'Issue' => __DIR__ . '/src/Issue',
),
),
);
}
}
修改强>
对于PSR-0合规性,您可以在Module.php
和Application
文件夹中放置Issue
文件,“global”Module.php将如下所示:
<?php
require_once __DIR__ .'/src/Application/Module.php';
require_once __DIR__ .'/src/Issue/Module.php';
您还可以在每个Module.php
文件中注册自动加载命名空间。
同样,你应该更喜欢使用两个模块。