获取错误,找不到控制器

时间:2015-01-22 10:01:38

标签: php zend-framework2

我正在尝试使用Zend Framework创建HelloWorld模块,但它无法正常工作。我只会收到此错误:

  

Zend \ Mvc \ Controller \ ControllerManager :: createFromInvokable:失败   检索“helloworldcontrollerindex(别名:   HelloWorld \ Controller \ Index)“通过invokable类   的 “HelloWorld \控制器\索引控制器”;类不存在

请帮助我找出它无法正常工作的原因。

此目录结构:

HelloWorld
  ->Module.php
  ->config
     ->Module.config.php
  ->src
     ->HelloWorld
   ->Controller
  ->view
    ->helloworld
       ->Controller
          ->index.phtml

Module.php

<?php
 namespace HelloWorld;
use HelloWorld\Controller;
use Zend\Mvc\ModuleRouteListner;
use Zend\Mvc\MvcEvent;

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



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

}
?>

module.config.php

<?php
   return array(
       'controllers' => array(
         'invokables' => array(
             'HelloWorld\Controller\Index'
                        => 'HelloWorld\Controller\IndexController',
          ),
    ),
'router' => array(
      'routes'      => array(
         'write-hello-world' => array(
             'type' => 'Zend\Mvc\Router\Http\Literal', 
             'options' => array(
               'route'   => '/writehello',
               'defaults' => array(
                  'controller' => 'HelloWorld\Controller\Index',
                  'action'     => 'index',
                ),
             ),
          ),
       ),
    ),

'view_manager' => array(
        'template_path_stack' => array(__DIR__ . '/../view',),
 ),
);
?>

IndexController.php

<?php

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

class IndexController extends AbstarctActionController{

    public function indexAction ()
    {
        $views = new ViewModel(array('test' => 'hello bhavik'));
        $views->setTemplate('HelloWorld/index/index');
        return $views;
    }
}

?>

index.phtml

<h1>
    <?php
    echo $this->text;
    ?>

</h1>

4 个答案:

答案 0 :(得分:3)

此错误基本上意味着ZF2无法找到您的控制器。

我认为这是一个路径问题:你的Controller目录是src-&gt; HelloWorld的子目录吗?因为它应该:

Your_Module_Name
|- src 
   |- Your_Module_Name
      |- Controller
         |- IndexController.php

所以,在你的情况下:

HelloWorld
|- src
   |- HelloWorld
      |- Controller
         |- IndexController.php

答案 1 :(得分:2)

有同样的问题,我的问题是我的文件夹名为“controller”而不是“Controller”

答案 2 :(得分:1)

我认为您在“Module.php”文件中的getAutoloaderConfig()中出错,您必须在“ Zend \ Loader \ StandardAutoloader ”下的键“命名空间”中添加“s”键入“名称空间”而不是“名称空间”。

你应该在最后

公共函数getAutoloaderConfig() {     返回数组(         'Zend \ Loader \ StandardAutoloader'=&gt;阵列(             '名称空间'=&gt;阵列(                  NAMESPACE =&gt;的 DIR 即可。 '/ src' 中。的 NAMESPACE 下,             )         )     ); }

答案 3 :(得分:0)

在'/ src'之后添加一个“/”   NAMESPACE =&gt;的 DIR 即可。 '的 / SRC / '。的 NAMESPACE 下, 代替   NAMESPACE =&gt;的 DIR 即可。 '/ src' 中。的 NAMESPACE