1

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

模块目录结构

的内容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()

当我尝试访问 urlhttp://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();
    }
}
?>
4

2 回答 2

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

You need to use backslashes on that one ! All the namespaces are declared with backslashes. That's probably why the AbstractPluginManager doesn't find your ProjectController ;).

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

Same here

于 2013-05-30T07:39:33.480 回答
0

检查你的:

项目控制器.php

//必须像下面这样声明类

class ProjectController extends AbstractActionController
于 2014-08-19T10:20:12.510 回答