2013-05-29 63 views
1

我正尝试在Zend Skeleton应用程序中创建新模块。我正在关注Zend框架有关Album模块的入门教程。唯一的区别是我使用项目名称而不是专辑。这是我的模块结构。ZF2:Zend框架2.2未找到控制器错误

module directory structure

module.config.php内容如下所示。

<?php 
namespace Project; 

return array(
    'router' => array(
    'routes' => array(
     'project' => array(
      'type' => 'segment', 
      'options' => array(
       'route' => '/project[/:action][/:id]', 
       'contraints' => array(
        'action' => '[a-zA-Z][a-zA-Z0-9_-]*', 
        'id' => '[0-9]+' 
       ), 
       'defaults' => array(
        'controller' => __NAMESPACE__.'/Controller/'.__NAMESPACE__, 
        'action' => 'index' 
       ) 
      ) 
     ) 
    ) 
), 
    'controllers' => array(
    'invokables' => array(
     'Project/Controller/Project' => 'Project/Controller/ProjectController', 
    ) 
), 
    'view_manager' => array(
    'template_path_stack' => array(
     'project' => __DIR__ . '../view', 
    ) 
), 
); 

Module.php的内容如下。

<?php 
namespace Project; 

class Module 
{ 
    public function getAutoloaderConfig() 
    { 
     return array(
      'Zend\Loader\ClassMapAutoloader' => array(
       __DIR__ . '/autoload_classmap.php', 
      ), 
      'Zend\Loader\StandardAutoloader' => array(
       'namespaces' => array(
        __NAMESPACE__ => __DIR__ . '/src/' . __NAMESPACE__, 
       ), 
      ), 
     ); 
    } 

    public function getConfig() 
    { 
     return include __DIR__ . '/config/module.config.php'; 
    } 
} 

文件autoload_classmap.php只返回一个空数组。

<?php 
return array() 

当我试图访问url http://local.zf2/project/时,出现以下错误。

Fatal error: Class 'Project/Controller/ProjectController' not found in 
/home/bliss/public_html/local.zf2/vendor/zendframework/zendframework/library 
/Zend/ServiceManager/AbstractPluginManager.php on line 170 

当我看着AbstractPluginManager.php文件的行170包含$instance = new $invokable();

我倾倒了$invokable变量来查看它的值。它返回string(36) "Project/Controller/ProjectController"

不知何故ZF2无法找到该文件。有人可以帮忙吗?谢谢。

编辑:这里是ProjectController.php文件的内容。如果它能找到该文件,它会死亡,显示文件的名称。

<?php 
namespace Project\Controller; 

die(__FILE__); 

use Zend\Mvc\Controller\AbstractActionController; 
use Zend\View\Model\ViewModel; 

class ProjectController extends AbstractActionController 
{ 
    public function indexAction() 
    { 
     return array(); 
//  return new ViewModel(); 
    } 
} 
?> 
+0

好像它检测到文件但没有发现正确的课程在里面。检查类名和命名空间是否正确。 – claustrofob

+0

已更新的问题,包含'ProjectController'的内容 – traditional

+3

看起来您在module.config.php的缺省值和可调用键中使用了错误的斜杠 –

回答

1
'controllers' => array(
    'invokables' => array(
     'Project/Controller/Project' => 'Project/Controller/ProjectController', 
) 
), 

你需要对一个使用反斜杠! 所有的名称空间都用反斜线声明。这可能是AbstractPluginManager找不到你的ProjectController;)。

'defaults' => array(
'controller' => __NAMESPACE__.'/Controller/'.__NAMESPACE__, 
'action' => 'index' 
) 

同样在这里

+0

是的,我也认为这可能是问题所在。我今晚会检查一下。 – traditional

+0

@Tounu什么反斜杠?我有点困惑 - >你的例子似乎没有使用反斜杠? – Dannyboy

+0

@traditional您是否能够解决此问题?我有完全相同的问题... – Dannyboy

0

检查:

ProjectController.php

//必须声明类像下面

class ProjectController extends AbstractActionController