我正在尝试使用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>
答案 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 强>,