Ошибка, указанная неверным контроллером, даже если контроллер присутствует - PullRequest
4 голосов
/ 12 октября 2011

У меня есть имя контроллера на верблюде под названием MenuItem. И также я создал маршрутизатор для этого конкретного контроллера как

    $routeMenuItem = new Zend_Controller_Router_Route('/menu-item/:action/:menu/:parent/:id/*', array(
        'controller'    => 'MenuItem',
        'action'        => 'index',
        'menu'          => 1,
        'parent'        => 0,
        'id'            => 0        
    ));

Нет, когда я иду по этому маршруту, скажем, /menu-item/index/2 Я получаю ошибку, Invalid controller specified (MenuItem) Ошибка.

Однако я сталкиваюсь с этой проблемой при развертывании в среде linux . Но во время разработки в среде Windows он работает нормально .

Как это решить?

Дополнительная информация

Контроллер:

File Name: MenuItemController.php
Class Name: MenuItemController

Трассировка стека

#0 /../library/Zend/Controller/Front.php(954): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#1 /../library/Zend/Application/Bootstrap/Bootstrap.php(97): Zend_Controller_Front->dispatch()
#2 /../library/Zend/Application.php(366): Zend_Application_Bootstrap_Bootstrap->run()
#3 /../public/index.php(25): Zend_Application->run()
#4 {main}   

Параметры запроса

array (
  'action' => 'index',
  'menu' => '2',
  'controller' => 'MenuItem',
  'parent' => 0,
  'id' => 0,
)

Ответы [ 2 ]

1 голос
/ 12 октября 2011

Это связано с тем, что в Windows не учитывается регистр, а в операционных системах на основе Linux.

Из руководства ZendFramework:

Диспетчер Zend_Controller затем принимает значение контроллера и отображает это к классу. По умолчанию это Title-регистр имени контроллера и добавляет слово Controller. Таким образом, в нашем примере выше, дорожная карта контроллера отображается на класс RoadmapController.

Это означает, что MenuItemController.php и MenuitemController.php - две разные вещи, поэтому автозагрузчик не может найти совпадение.

Как правило, при использовании контроллеров, состоящих из нескольких слов, убедитесь, что только первая буква класса и буква C в контроллере пишутся с большой буквы.

0 голосов
/ 12 октября 2011

В прошлом у меня была очень похожая проблема (я также занимался разработкой для Windows и развертыванием приложения на сервере Linux).Моим решением было переименовать классы и файлы, чтобы удалить заглавные буквы.В вашем случае это будет:

File Name: MenuitemController.php
Class Name: MenuitemController
...