Intereting Posts
Внутренняя функция хэш-кода PHP CodeIgniter: глобальные Vars через контроллер и косвенная модификация перегруженного имущества Расширить проверку формы как преобразовать объект в строку в php как хранить переменные значения при загрузке нескольких страниц Исходя из сумасшествия здесь, не могу понять, почему функции rename (), copy () не работают В чем разница между fastcgi и fpm? Как считать простое число от 0 до 100000000 менее чем за 1 минуту в PHP? Убедитесь, что несколько строк пусты Только переменные должны передаваться по ссылке … в строке 13 Fail PHP: Отключите все файлы в каталоге и затем удалите этот каталог PHP XML: Недопустимое смещение, но оно в массиве? Как отправить объект json с помощью Http.post (Angular 2) (сторона php-сервера) Символ больше и меньше, чем в регулярных выражениях как написать zpl-код внутри php-скрипта и как отправить его на принтер Zebra для печати

Нет адаптеров по умолчанию в Zend, если я не добавлю их явно. Является ли это признаком или ошибкой?

Если я не установлю адаптер по умолчанию явно в файле начальной загрузки, Zend_DB_Tables не имеет адаптеров по умолчанию. Я осознаю:

Exception information: Message: No adapter found for Application_Model_MyModel 

Когда я вставил бутстрап:

 protected function _initDb(){ //this returns NULL //Zend_Debug::dump(Zend_Db_Table::getDefaultAdapter()); $resource = $this->getPluginResource('db'); $db = $resource->getDbAdapter(); // Now it is not NULL //Zend_Debug::dump($db); Zend_Db_Table::setDefaultAdapter($db); } 

то это работает.

Это нормальное поведение или ошибка в ZendFramework-1.11.10?

мой файл app.ini выглядит так:

 resources.db.adapter = "Pdo_Mysql" resources.db.isDefaultTableAdapter = true resources.db.params.dbname = "mydb" resources.db.params.username = "myuser" resources.db.params.password = "mypass" resources.db.params.host = "localhost" resources.db.params.charset = "UTF8" 

РЕДАКТИРОВАТЬ

Оказывается, мне не разрешено использовать _initDb () имя должно быть чем-то другим, иначе я получаю проблему с круговой зависимостью, если я делаю $ this-> bootstrap ('db');

Он должен работать без необходимости явно определять Zend_Db_Table::setDefaultAdapter() . Вам может не хватить $this->bootstrap('db') который создает экземпляр вашего ресурса db .

Вот код, который у меня есть в моем приложении appliction.ini

 resources.db.adapter = "Pdo_Mysql" resources.db.params.host = "dbhost" resources.db.params.username = "username" resources.db.params.password = "pass" resources.db.params.dbname = "dbname" resources.db.params.charset = "utf8" resources.db.isDefaultTableAdapter = true resources.db.profiler.enabled = true resources.db.profiler.class = Zend_Db_Profiler_Firebug 

Вот код, который у меня есть в моей начальной загрузке

 protected function _initDbAdapter() { $this->bootstrap('db'); $db = $this->getPluginResource('db'); // force UTF-8 connection $stmt = new Zend_Db_Statement_Pdo( $db->getDbAdapter(), "SET NAMES 'utf8'" ); $stmt->execute(); $dbAdapter = $db->getDbAdapter(); // Query profiler (if enabled and not in production) $options = $db->getOptions(); if ($options['profiler']['enabled'] == true && APPLICATION_ENV != 'production' ) { $profilerClass = $options['profiler']['class']; $profiler = new $profilerClass('All DB Queries'); $profiler->setEnabled(true); $dbAdapter->setProfiler($profiler); } Zend_Registry::set('db', $dbAdapter); } 

ОБНОВИТЬ

Ответ был найден через комментарии, вот результат:

Методы _init + standard resource name (т. _init + standard resource name , log, session) запускаются автоматически в вашем бутстрапе, изменяя имя вашего метода _init, который инициализирует ваш db чем-то другим, чем _initDb чтобы сделать трюк. В противном случае, если вы попытаетесь выполнить $this->bootstrap(*resource name*) вы получите циклическую зависимость.