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

Routing problems in ZF2 : Controller not mapped

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

"The requested controller could not be mapped to an existing controller class".

我正在尝试呼叫这条路线: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()
     {
     }
 }

因此,为了进一步解释我的评论,通过在您的路线中包含一个 :controller 段,您已经告诉 ZF 尝试将 URL 中的第一件事与控制器匹配的东西管理器可以加载(在您的情况下,是您控制器可调用项中的一个键)。您在路线中定义的控制器默认值仅在您访问 http://zf2.local/ 时适用。

所以对您而言,最快的解决方法是将您的配置更改为:

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

'Listapp' in the 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',
                 ),
             ),
         ),
     ),
 ),