我正在尝试在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()
当我尝试访问网址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 :(得分: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