Zend автозагрузчик

Я пытаюсь автоматически загрузить формы, найденные в моем проекте, в application/forms/*.php (в данном случае LoginForm.php).

Как настроить автозагрузчик Zends для автоматической загрузки этой формы? Поскольку я не хочу использовать уродливые пространства имен, я включаю запасной вариант в своем бутстрапе. У меня нет ничего, связанного с формами, настроенными в моем application.ini.

Благодарность!


person Antwan van Houdt    schedule 23.04.2012    source источник
comment
framework.zend.com/manual/en/   -  person Alister Bulman    schedule 23.04.2012
comment
@AlisterBulman, о да, не нашел этого в Google .. нет, это не ответ на мой вопрос.   -  person Antwan van Houdt    schedule 23.04.2012
comment
Расскажите подробнее, какое пространство имен вы бы хотели. Все можно настроить. По умолчанию вы должны иметь доступ к этой форме, назвав класс [Appnamespace_]Form_LoginForm. Appnamespace, которое вы можете настроить в application.ini   -  person Weltschmerz    schedule 23.04.2012
comment
Если вы используете Zend_Application, то автозагрузчик уже настроен, и в этом случае вы должны следовать предложению namesnik назвать Appnamespace_Form_LoginForm.   -  person drew010    schedule 23.04.2012
comment
@ drew010 это то, чего я пытаюсь избежать, я предпочитаю иметь возможность вызывать new LoginForm без префиксов пространства имен (в настоящее время я делаю это и с моими моделями!). Пространство имен моих приложений — Application, и при вызове Application_Form_LoginForm также происходит сбой. Структура директории такая: приложение -> формы -> LoginForm.php   -  person Antwan van Houdt    schedule 23.04.2012
comment
Антван: Подумайте об этом по-другому. Он не должен называться «LoginForm», он должен называться «Appname_Form_Login» — это логика, которую использует Zend. Если вы хотите использовать «LoginForm», вам нужно подумать о совместимости; это будет полностью универсальная форма входа? Если нет, то почему у него будет полностью общее имя? Что насчет того, что позже появится другая форма входа?   -  person    schedule 24.04.2012
comment
Чтобы расширить замечательный комментарий RiverC, если у вас нет иерархии в именах классов, автозагрузчику придется проделать много неэффективной работы, чтобы найти класс для автозагрузки. Как он узнает, в каком каталоге находится LoginForm, не просмотрев сначала огромное количество мест? Я не уверен, почему вызов Application_Form_LoginForm не работает, так как это должно работать с учетом вашей структуры каталогов.   -  person drew010    schedule 24.04.2012
comment
Какая версия ZendFramework?   -  person Michael    schedule 24.04.2012
comment
1.11.1 -- последняя версия, скачал несколько дней назад   -  person Antwan van Houdt    schedule 24.04.2012
comment
@AntwanvanHoudt смотрите новый ответ - я не уверен на 100%, что правильно понял ваш вопрос.   -  person vascowhite    schedule 07.05.2012


Ответы (2)


Автозагрузчик по умолчанию загрузит это для вас. Убедитесь, что вы проверили следующее:

  1. Ваш файл application/forms/Loginform.php
  2. Файл содержит что-то вроде этого: -

    class Application_Form_Loginform extends Zend_Form
    {
       //Take special note of the capitalisation - it is important
       // Also note it is Form NOT Forms
        public function init()
        {
            //Your code here
        }
    }
    
  3. Назовите свой класс следующим образом: -

    $form = new Application_Form_Loginform();
    

Обратите особое внимание на регистр букв, важно, чтобы вы правильно указали его, иначе автозагрузчик не найдет ваш класс и будет жаловаться.

person vascowhite    schedule 23.04.2012
comment
На самом деле я начал делать это так, хотя изначально это было не то, что я хотел. Спасибо за ответ в любом случае. - person Antwan van Houdt; 08.05.2012
comment
Вы привыкаете к соглашению об именах. Сначала он мне не слишком нравился, но он мне приглянулся. - person vascowhite; 08.05.2012

Не уверен, что это отвечает на ваш вопрос, так как он немного расплывчатый, но попробуйте следующее.

В вашем бутстрапе:

protected function _initAppAutoload()
{
    $moduleLoad = new Zend_Application_Module_Autoloader(array(
       'namespace' => '',
       'basePath'   => APPLICATION_PATH
    ));
}

Очевидно, тогда класс Form_LoginForm() будет существовать в application/forms/LoginForm.php.

person Asciant    schedule 23.04.2012