Деструктор зенда?

Мы используем фреймворк Zend для MVC и Pear для доступа к базе данных. Мне было интересно, должен ли я закрывать соединение с базой данных каждый раз, когда запрос завершен? И если да, то есть ли способ сделать это элегантно?

У нас есть около 50 действий, распределенных по нескольким контроллерам, и я действительно не хочу помещать db->disconnect() в конец каждого контроллера. Есть ли способ, которым я могу поместить эту команду отключения в одно место, "деструктор", если хотите, и чтобы Zend вызывал ее автоматически всякий раз, когда запрос завершен?


person Martin Konecny    schedule 09.03.2011    source источник


Ответы (2)


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

Во-первых, вы можете поместить свой «деструктор» в плагин контроллера. в т.ч. Перехватчик dispatchLoopShutdown.

Во-вторых, если вы действительно хотите, чтобы что-то выполнялось в самом конце вашего запроса, вы можете поместить свой «деструктор» после $application->bootstrap()->run(); в свой index.php.

person Marcin    schedule 10.03.2011
comment
Используйте это экономно, что я рекомендую. Делайте выбор исходя из среднего времени пользователя (количества запросов), потраченного на приложение и количества пользователей на вашем сайте. Сделайте ставку на основе количества и использования в службе или контроллере и использовании непостоянных соединений. - person Gary; 01.01.2016

Только 100% пуленепробиваемое решение использует register_shutdown_function(). Он вызывается, даже если запрос перенаправлен ($this->_helper->redirector->gotoUrlAndExit()) или скрипт убит (используя die() или exit()). И плагин, и последняя строка индекса могут дать сбой при перенаправлении или уничтожении скрипта.

person Tomáš Fejfar    schedule 30.03.2011