2013-05-29 62 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