ZF2:Zend框架2.2控制器未找到错误

时间:2013-05-29 21:34:46

标签: zend-framework2

我正在尝试在Zend Skeleton应用程序中创建新模块。我正在关注Zend框架关于专辑模块的入门教程。唯一的区别是我使用项目名称而不是相册。这是我的模块结构。

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()

当我尝试访问网址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();
    }
}
?>

2 个答案:

答案 0 :(得分:1)

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

你需要在那个上使用反斜杠! 所有名称空间都使用反斜杠声明。这可能就是为什么AbstractPluginManager找不到你的ProjectController;)。

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

同样在这里

答案 1 :(得分:0)

检查你的:

ProjectController.php

//必须声明如下所示的类

class ProjectController extends AbstractActionController