<?php
/**
* My new Zend Framework project
*
* @author
* @version
*/
define( 'ROOT', dirname( dirname( __FILE__ ) ) );
set_include_path(
'.'
. PATH_SEPARATOR . ROOT
. PATH_SEPARATOR . ROOT . '/application/default'
. PATH_SEPARATOR . ROOT . '/library'
. PATH_SEPARATOR . ROOT . '/models'
. PATH_SEPARATOR . ROOT . '/models/handlers'
. PATH_SEPARATOR . '/usr/share/php/Zend/library'
. PATH_SEPARATOR . '/usr/share/php/Doctrine/lib'
);
require_once 'Zend/Controller/Plugin/Abstract.php';
require_once 'Zend/Controller/Front.php';
require_once 'Zend/Controller/Request/Abstract.php';
require_once 'Zend/Controller/Action/HelperBroker.php';
/**
*
* Initializes configuration depndeing on the type of environment
* (test, development, production, etc.)
*
* This can be used to configure environment variables, databases,
* layouts, routers, helpers and more
*
*/
class Initializer extends Zend_Controller_Plugin_Abstract
{
/**
* @var Zend_Config
*/
protected static $_config;
/**
* @var string Current environment
*/
protected $_env;
/**
* @var Zend_Controller_Front
*/
protected $_front;
/**
* @var string Path to application root
*/
protected $_root;
/**
* Constructor
*
* Initialize environment, root path, and configuration.
*
* @param string $env
* @param string|null $root
* @return void
*/
public function __construct($env, $root = null)
{
$this->_setEnv($env);
if (null === $root) {
$root = realpath(dirname(__FILE__) . '/../');
}
$this->_root = $root;
$this->initPhpConfig();
$this->_front = Zend_Controller_Front::getInstance();
date_default_timezone_set( 'UTC' );
// set the test environment parameters
if ( $env == 'test') {
// Enable all errors so we'll know when something goes wrong.
error_reporting(E_ALL | E_STRICT);
ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
$this->_front->throwExceptions(true);
}
$configFile = dirname( __FILE__ ) . '/config.xml';
require_once 'Zend/Config/Xml.php';
self::$_config = new Zend_Config_Xml( $configFile, $this->_env );
require_once 'Zend/Registry.php';
Zend_Registry::set( 'Config', self::$_config );
}
/**
* Initialize environment
*
* @param string $env
* @return void
*/
protected function _setEnv($env)
{
$this->_env = $env;
}
/**
* Initialize Data bases
*
* @return void
*/
public function initPhpConfig()
{
}
/**
* Route startup
*
* @return void
*/
public function routeStartup(Zend_Controller_Request_Abstract $request)
{
$this->initApp();
$this->initDb();
$this->initHelpers();
$this->initView();
$this->initPlugins();
$this->initRoutes();
$this->initControllers();
}
/**
* Initialize configured application objects, such as backend cache object,
* global logger, etc.
*
*/
public function initApp()
{
}
/**
* Initialize data bases
*
* @return void
*/
public function initDb()
{
require_once 'Doctrine.php';
spl_autoload_register( array( 'Doctrine', 'autoload' ) );
Doctrine_Manager::connection( self::$_config->db->dsn );
foreach( self::$_config->db->attributes as $key => $value ) {
Doctrine_Manager::getInstance()->setAttribute( $key, $value );
}
Doctrine::loadModels( array(
dirname( dirname( __FILE__ ) ) .'/models'
) );
}
/**
* Initialize action helpers
*
* @return void
*/
public function initHelpers()
{
// register the default action helpers
Zend_Controller_Action_HelperBroker::addPath(
'../application/default/helpers',
'Zend_Controller_Action_Helper'
);
}
/**
* Initialize view
*
* @return void
*/
public function initView()
{
// Bootstrap layouts
$layout = Zend_Layout::startMvc(array(
'layoutPath' => $this->_root . '/application/default/layouts',
'layout' => 'main'
));
$view = $layout->getView()
->addHelperPath('Zend/Dojo/View/Helper/', 'Zend_Dojo_View_Helper');
Zend_Dojo::enableView( $view );
}
/**
* Initialize plugins
*
* @return void
*/
public function initPlugins()
{
$this->_front->setDefaultModule( 'default' );
}
/**
* Initialize routes
*
* @return void
*/
public function initRoutes()
{
}
/**
* Initialize Controller paths
*
* @return void
*/
public function initControllers()
{
$this->_front->addControllerDirectory($this->_root . '/application/default/controllers', 'default');
}
}