2013-02-10 1 views
3

Я стараюсь не путать маршруты для некоторых контроллеров в zend framework 2, и даже после того, как я прочитал много, я не могу понять, почему он все еще говорит мне. Запрошенный контроллер не мог быть сопоставлен с существующим класс контроллера. У меня есть модуль с именем CRM, а в папке src у меня есть Контакты и Компании, каждый из которых имеет контроллер/форму/модель. Это мой файл module.config:Маршруты в zend framework 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

+0

@ user2047893 Извините, вам все равно нужно будет отобразить контроллеры в разделе 'invokables' вашего конфигуратора контроллера (т. Е. Изменить префикс' CRM', который у вас есть сейчас, с 'Contacts' и' Companies' соответственно) – Crisp

+0

Я просто вижу теперь, когда вы написали второй комментарий. Да, это действительно проблема. Я уже их модифицировал, и он работает. Большое спасибо! – knot

2

В верхней части вашей конфигурации вы имеете конфигурацию контроллера invokables:

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

Первое значение в рассмотренном выше, является идентификатором. Это то, что вы должны использовать в своих определениях маршрутов. Например ваш contacts маршрут - попробуйте изменить следующее:

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

Я пробовал это уже, но после того, как я изменяю CRM вместо контактов, он дает мне Fatal Error, что класс не может быть найден в .. \ vendor \ .. \ AbstractPluginManager.php в строке 170. Любая идея? – knot

+0

Теперь проверьте, что файл класса имеет правильное пространство имен и имя класса для соответствия CRM \ Controller \ ContactsController. – DrBeza

+0

Как и ваш 'module.config.php' getAutoloaderConfig() ' – Sam

 Смежные вопросы

  • Нет связанных вопросов^_^