U prijašnjem postu sam opisao jednostavan način korištenja konfiguracije u Zend Framework aplikacijama, te sam na kraju naveo nedostatke koje ima takav pristup. U ovom postu će biti primjer konfiguracije logger-a (objekt preko kojeg se u aplikaciji logiraju događaji) kod kojeg su ti nedostaci izbjegnuti.
Ovaj put neće biti posebne konfiguracijske datoteke, a postaviti će se samo jedan konfiguracijski parametar za logiranje - log.path, tj. putanja u koju želimo da aplikacija sprema logove (stvaran primjer bi imao malo više parametara):
application/configs/application.ini:
[production] phpSettings.display_startup_errors = 0 phpSettings.display_errors = 0 bootstrap.path = APPLICATION_PATH "/Bootstrap.php" bootstrap.class = "Bootstrap" resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers" log.path = APPLICATION_PATH "/../data/log" [staging : production] [testing : production] [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1
U bootstrap-u ne spremamo konfiguraciju kao u primjeru iz prošlog posta nego te podatke koristimo za kreiranje loggera, instance Zend_Log klase koju koristimo za logiranje. Naravno, logger se sprema u registry iz kojeg ga možemo dohvatiti i koristiti iz bilo kojeg dijela aplikacije (naravno, stvarni bootstrap bi imao malo više toga):
application/Bootstrap.php:
class Bootstrap extends Zend_Application_Bootstrap_Bootstrap { protected function _initAutoload() { $autoloader = Zend_Loader_Autoloader::getInstance(); $moduleLoader = new Zend_Application_Module_Autoloader(array( 'namespace' => '', 'basePath' => APPLICATION_PATH )); return $moduleLoader; } protected function _initLogger() { $options = $this->getOptions(); $logger = new Zend_Log( new Zend_Log_Writer_Stream($options['log']['path'].'/log_'.date('Y-m-d').'.log') ); Zend_Registry::set('logger', $logger); return $logger; } }
Kad trebamo nešto logirati, logger čitamo iz registry-ja i pozivamo odgovarajuću metodu na njemu:
<?php Zend_Registry::get('logger')->notice('Some application notice');
U usporedbi sa primjerom iz prijašnjeg posta:
Comments
Post new comment