2013-02-10 193 views
3

我想在zend框架2中很難把一些控制器的路線,甚至在我讀了很多後,我不明白爲什麼它仍然告訴我所請求的控制器無法映射到現有的控制器類。我有一個名爲CRM的模塊,並在src文件夾中有聯繫人和公司,每個人都有控制器/表單/模型。這是我的module.config文件:在zend框架中的路線2

 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', 
    ), 
), 

);

任何幫助將非常感激。

回答

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', 
      ), 
     ), 
    ); 
} 
+0

我只是嘗試在getAutoloaderConfig()中添加這些行,但它似乎仍然不起作用。請求的控制器無法映射到現有的控制器類。 – knot 2013-02-11 13:23:31

+0

@ user2047893對不起,您仍然需要在控制器配置的'invokables'部分中映射控制器(即分別用'Contacts'和'Companies'更改您現在在那裏的'CRM'前綴) – Crisp 2013-02-11 13:29:24

+0

我只看到現在你寫了第二條評論。是的,這確實是問題所在。我已經修改了它們,它的工作原理。非常感謝! – knot 2013-02-11 13:37:38

2

在你的配置的頂部你有控制器invokables配置:

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

第一個值在上面是一個標識符。這是你打算在你的路由定義中使用的。例如您contacts路線 - 嘗試改變如下:

'defaults' => array(
    'controller' => 'CRM\Controller\Contacts', 
    'action'  => 'index', 
), 
+0

我已經嘗試過了,但是在我更改CRM而不是聯繫人之後,它給了我一個致命錯誤,該類無法在第170行的.. \ vendor \ .. \ AbstractPluginManager.php中找到。任何想法? – knot 2013-02-11 09:15:25

+0

現在檢查類文件是否具有正確的名稱空間和類名以匹配CRM \ Controller \ ContactsController。 – DrBeza 2013-02-11 10:08:42

+0

以及你的'module.config.php'' getAutoloaderConfig()' – Sam 2013-02-11 10:28:58