ZF2中的路由问题:控制器未映射

时间:2015-04-24 15:38:47

标签: php zend-framework2 zend-route

我试图在Zf2中创建一个简单的CRUD来了解它,并且我在路由我唯一的控制器时遇到了问题。我有这个错误;

  

"请求的控制器无法映射到现有的控制器类"。

我试图打电话给这条路线:http://zf2.local/Listapp

这是我的结构: module/Listapp/src/Listapp/Controller/ListappController.php

命名空间为namespace Listapp\Controller;

这是我的自动加载器配置:

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

这是我的module.config.php

return array(
 'controllers' => array(
     'invokables' => array(
         'Listapp\Controller\Listapp' => 'Listapp\Controller\ListappController'
     )
 ),

 'router' => array(
     'routes' => array(
         'listapp' => array(
             'type'    => 'segment',
             'options' => array(
                 'route'    => '/[:controller[/:action][/:id]]',
                 'constraints' => array(
                     'controller' => '[a-zA-Z][a-zA-Z0-9_-]*',
                     'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                     'id'     => '[0-9]+',
                 ),
                 'defaults' => array(
                     'controller' => 'Listapp\Controller\Listapp',
                     'action'     => 'index',
                 ),
             ),
         ),
     ),
 ),

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

任何帮助将不胜感激!

编辑: 这是我的控制器中的代码(减去其他CRUD函数):

namespace Listapp\Controller;

use Zend\Mvc\Controller\AbstractActionController;

class ListappController extends AbstractActionController
 {
     public function indexAction()
     {
     }
 }

1 个答案:

答案 0 :(得分:2)

因此,为了进一步解释我的评论,在您的路线中添加:controller段,您已告诉ZF尝试将您网址中的第一件事与控制器管理员可以加载的内容相匹配(在你的情况下,你控制器invokables中的一个键)。您在路线中定义的控制器默认仅适用于您访问http://zf2.local/的情况。

因此,对您来说,最快的解决方法是将配置更改为:

'controllers' => array(
     'invokables' => array(
         'Listapp' => 'Listapp\Controller\ListappController'
     )
 ),

' Listapp'然后,URL将匹配此控制器,一切都将按预期工作。

一般情况下,如果你避免在路由中使用:controller并且每个控制器至少有一个路由,例如:

,它会使事情变得更清楚。
 'controllers' => array(
     'invokables' => array(
         'Listapp\Controller\Listapp' => 'Listapp\Controller\ListappController'
     )
 ),
 'router' => array(
     'routes' => array(
         'listapp' => array(
             'type'    => 'segment',
             'options' => array(
                 'route'    => '/listapp[/:action[/:id]]',
                 'constraints' => array(
                     'action' => '[a-zA-Z][a-zA-Z0-9_-]*',
                     'id'     => '[0-9]+',
                 ),
                 'defaults' => array(
                     'controller' => 'Listapp\Controller\Listapp',
                     'action'     => 'index',
                 ),
             ),
         ),
     ),
 ),