Nu börjar det roliga! Innan vi börjar med att studera själva koden så är det passande att först kika lite närmare på hur en ZF-applikation fungerar.
Vår applikation har en enda accesspunkt, index.html. All kommunikation med vår blogg sker genom denna fil. I index.html laddas in en bootstrap-fil (bootstrap.php) som:
• sätter väsentliga sökvägarna (set_include_path(...) ). Vi måste berätta för vår blogg var t.ex. Zend Framework -biblioteket och andra klasserna kan hittas.
• skapar en ny instans av Zend_Controller_Front (front controller)
• laddar in diverse inställningar (sköts av klassen Initialiazer)
• processerar HTTP-förfrågan (dispatch() ).
I klassen Initializer finns följande metoder:
• initControllers()
• initDb()
• initPhpConfigs()
• initRoutes()
• initView()
• routeStartup()
Vi måste även sätta sökvägarna till controller-katalogerna (se initControllers() ):
$this->_front->addControllerDirectory($this->_root . '/application/blog/controllers', 'blog');
$this->_front->addControllerDirectory($this->_root . '/application/login/controllers', 'login');
Metoden initPhpConfigs() skapar ett Zend_Config-objekt av de inställningar som finns i filen settings.php. Vår blogg har inte så många inställningar så det enda som finns i settings.php är inställningarna för databasuppkopplingen. Här är det viktigt att type, host, username och password har korrekta värden. Variabeln type låter oss välja vilken sorts databas vi vill använda. I detta fall har vi valt pdo_mysql som bestämt säger oss att MySql skall användas!
Metoden initDb() skapar ett Zend_Db-objekt som vi kan använda för att kommunicera med databasen. Den använder sig utav det Zend_Config-objekt som vi tidigare nämnde. Vi väljer också att ha detta Zend_Db_objekt som default genom att använda metoden Zend_Db_Table_Abstract::setDefaultAdapter(...);
Senare i koden, när vi behöver en databasuppkoppling, kan vi mycket enkelt komma åt en genom att kalla Zend_Db_Table::getDefaultAdapter(). Nu slipper vi skapa en egen wrapper-klass, som gör samma sak åt oss!
Om du tycker att Zend_Db_Table::getDefaultAdapter() är tok för långt så kan du göra en wrapper-klass:
class Db
{
public static function connection()
{
return Zend_Db_Table::getDefaultAdapter();
}
}
Då kan du använda
Db::connection()
istället för
Zend_Db_Table::getDefaultAdapter()