Где лучше всего хранить специфичные для модели классы приложений в приложении Zend Framework? - PullRequest
2 голосов
/ 12 января 2011

Учитывая, что модель является «доменным представлением данных, над которыми работает приложение». [ Википедия: MVC ], сервис, форма, классы плагинов и т. Д. Не считаются частью модели, поэтому они находятся в своих собственных каталогах под /application. Автозагрузчик ресурсов по умолчанию устанавливает это для нас, поэтому MyApp_Form_Login автоматически находится в /application/form/Login.php.

Для моего приложения мне нужно написать собственный адаптер аутентификации. Логика в нем будет зависеть от приложения, поэтому это не повторно используемый библиотечный код, поэтому он не принадлежит /library/MyApp. Это не класс обслуживания, поэтому он не принадлежит ни /application/service, ни форме и т. Д. Итак, идиоматически, где должен храниться этот класс?

Ответы [ 4 ]

2 голосов
/ 12 января 2011

Вы можете создать дополнительные папки в папке application и добавить путь к ресурсу в своем классе Bootstrap.

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

protected function _initAutoloader()
{
    $autoloader = new Zend_Application_Module_Autoloader(array(
            'basePath' => APPLICATION_PATH,
            'namespace' => 'Application',
        ));
    $autoloader->addResourceType('MyType', APPLICATION_PATH . '/mytypes');
    return $autoloader;
}

Тогда вы можете хранить класс с именем Application_MyType_Foo в файле application/mytypes/Foo.php.

Если вы посмотрите на код для Zend_Application_Module_Autoloader, это по сути то, что они делают, чтобы дать вам автозагрузку для моделей, форм, плагинов и т. Д.

2 голосов
/ 12 января 2011

Просто создайте специальную библиотеку приложения.Обычно такой класс не единственный кандидат в личную библиотеку.

0 голосов
/ 12 января 2011

Я недавно ответил на аналогичный вопрос, взгляните на ссылку ниже и посмотрите, поможет ли это!;)

Вы хотите загружать разные пространства имен из одного каталога?

0 голосов
/ 12 января 2011

Один из подходов заключается в создании класса обслуживания (мы знаем, где они находятся: /application/service), который инкапсулирует логику аутентификации для конкретного приложения.Он может использовать библиотечный класс для выполнения базовой аутентификации, например, проверять имя пользователя и пароль по БД, но затем также применять логику для конкретного приложения перед возвратом результата в код клиента.

Пример:

class MyApp_Service_User {
  public function authenticate($sUsername, $sPassword) {
    $oAuth = Zend_Auth::getInstance();
    $oAuthAdapter = new Zend_Auth_Adapter_DbTable(...);
    $oResult = $oAuth->authenticate($oAuthAdapter);

    /* Application-specific logic */

    return $oAppSpecificAuthResult;
  }
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...