Как использовать класс обслуживания в классе контроллера? - PullRequest
0 голосов
/ 09 декабря 2011

Я пытаюсь интегрировать этот удивительный календарь в мой проект.У меня проблемы с обслуживанием.Я использую такую ​​структуру:

application/
    modules/
        agenda/
            controllers/
                CalendarController.php
            models/
            services/
                CalendarService.php
            views/
                filters/
                helpers/
                scripts/
                calendar/
                    view-calendar.php
    module2/
    module3/

Я маршрутизирую это в моем application.ini следующим образом:

resources.router.routes.agenda.route = /apps/agenda/
resources.router.routes.agenda.defaults.module = agenda
resources.router.routes.agenda.defaults.controller = calendar
resources.router.routes.agenda.defaults.action = view

Я включил браузер и получил следующее сообщение:

Message: Invalid controller class ("Agenda_CalendarController") 

Я исправил это с помощью суффикса Agenda_ и обновил браузер.Получил это:

Message: Controller "Agenda_CalendarController" is not an instance of Zend_Controller_Action_Interface

Так что я создал его с помощью "extends Zend_Controller_Action".Получил это: -)

Fatal error: Class 'Service_Calendar' not found in /home/[PATH TO MY APP FOLDER]/application/modules/agenda/controllers/CalendarController.php on line 30

Я не могу понять, что происходит не так.У кого-то есть подсказка или два для меня: -)

Примечание: я не знаю, означает ли это что-нибудь, но я использую NetBeans и нажимаю ли CTRL при наведении курсора на метод обслуживания класса в классе контроллера;соответствующая всплывающая информация верна.

Решение: Спасибо, ребята, вы дали мне путь, по которому нужно идти дальше.Мои модули начальной загрузки не были установлены правильно.с вашими подсказками я нашел этот пост от Боба Аллена, где он описывает ту же проблему.

Когда вы знаете, что ищете ...: -)

Спасибо, моя проблемаисправлено, и я знаю немного больше!

1 Ответ

1 голос
/ 09 декабря 2011

Соглашение о присвоении имен для контроллера не одинаково для модели / службы / представления и т. Д., В том смысле, что вам не нужно вводить тип в имени файла, как в случае с контроллером.Они должны следовать базовой схеме автозагрузки «имя-путь».

Таким образом, объявление для вашей службы будет: Agenda_Service_CalendarService, потому что это соответствует modules/agenda/services/CalendarService.php (обратите внимание на перегиб - из servicesв папку _Service_ единственного числа - это ZF работает, и это также происходит с моделями).

Также убедитесь, что вы правильно инициализировали модуль (имеющий собственный файл Bootstrap.php, настроенный в приложении.ini).

PS: NetBeans знает, где находится ваш класс, потому что он сканировал файлы и видел объявление, а не логическое включение этого класса.

...