zend — это адаптер БД, созданный до или после начальной загрузки

#php #zend-framework #zend-db

#php #zend-framework #zend-db

Вопрос:

Я пытаюсь настроить локатор служб во время начальной загрузки, все эти службы полагаются на базу данных Zend_Db, и у каждой службы есть необходимые средства отображения данных, введенные при создании.

выглядит примерно так:

 $alertService = new WORK_Alert_Service_Service(array("AlertMapper" => new Model_Alert_Mapper(), 
                                                          "AlertUserSubscriptionMapper" => new Model_Alert_User_Subscription_Mapper()));

    $emailerService = new WORK_Emailer_Service_Service(
        array("AccountMapper" => new Model_Emailer_Email_Account_Mapper()));

    $encryptionService = new WORK_Encryption_Service_Service();

    $services = array( 
        $alertService,
        $emailerService,
        $encryptionService
    );

    WORK_ServiceLocator::regiserServices($services);
  

Итак, что я обнаружил, так это то, что я получаю следующую ошибку

проблемНо не найден адаптер для Model_Emailer_DbTable_EmailAccounts

причина, по которой это происходит для службы отправки писем, но не для службы оповещений, заключается в том, что служба отправки писем подключается к БД и получает все доступные учетные записи электронной почты и сохраняет их в объекте для последующего использования при создании (поддерживает объект mapper, чтобы при необходимости можно было управлять списком учетных записей / очищать и сбрасывать его).

Создается ли адаптер Zend_Db после процесса начальной загрузки ? если да, возможно ли продвинуть это вперед?

могу ли я обойти это, переместив их в файлы начальной загрузки для отдельных модулей?

Ответ №1:

Я пытаюсь настроить локатор служб во время начальной загрузки

Тогда я предполагаю, что приведенный выше код появляется в методе bootstrap _init* . Если это так, просто поместите это в начале вашего метода

 protected function _initServices()
{
    $this->bootstrap('db');

    // and the rest
  

Смотрите http://framework.zend.com/manual/en/zend.application .теория работы.html#zend.application.теория работы.bootstrap.отслеживание зависимостей

Комментарии:

1. это было именно то, что мне было нужно, спасибо. и да, вы были правы в методе _init. Выполняются ли методы _init в том порядке, в каком они записаны в начальной загрузке?

2. Он использует get_class_methods() внутренне, который, по-видимому, возвращает их в порядке объявления. Я не уверен, как он интегрирует этот порядок с плагинами ресурсов, отсюда и необходимость начальной загрузки зависимостей