3

我几乎没有尝试将某些控制器的路由放在 zend 框架 2 中,即使在我阅读了很多内容之后,我也无法理解为什么它仍然告诉我请求的控制器无法映射到现有的控制器类。我有一个名为 CRM 的模块,在 src 文件夹中我有联系人和公司,他们每个人都有控制器/表单/模型。这是我的 module.config 文件:

     array(
         'controllers' => array(
         'invokables' => array(
              'CRM\Controller\Contacts' => 'CRM\Controller\ContactsController',
          'CRM\Controller\Companies' => 'CRM\Controller\CompaniesController',
    ),
),


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

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



'view_manager' => array(
    'template_path_stack' => array(
        'contacts' => __DIR__ . '/../view/crm',
        'companies' => __DIR__ . '/../view/crm',
    ),
),

);

任何帮助将非常感激。

4

2 回答 2

2

在配置的顶部,您有 Controller invokables 配置:

'CRM\Controller\Contacts' => 'CRM\Controller\ContactsController',

上面的第一个值是一个标识符。这就是您要在路由定义中使用的内容。例如您的contacts路线 - 尝试更改以下内容:

'defaults' => array(
     'controller' => 'CRM\Controller\Contacts',
     'action'     => 'index',
),
于 2013-02-11T01:02:59.520 回答
2

如果我正确理解了问题和结构,则需要在自动加载器配置中设置命名空间...

public function getAutoloaderConfig()
{
    return array(
        'Zend\Loader\StandardAutoloader' => array(
            'namespaces' => array(
                // CRM
                __NAMESPACE__  => __DIR__ . '/src/' . __NAMESPACE__,
                // Contacts
                'Contacts' => __DIR__ . '/src/Contacts',
                // Companies
                'Companies' => __DIR__ . '/src/Companies',
            ),
        ),
    );
}
于 2013-02-11T13:14:19.460 回答