lut 06

Aby przygotować połączenie z bazą danych należy zmodyfikować plik application.ini, oraz Bootstrap.php
Poniżej przykładowy plik application.ini, istotne elementy zaznaczyłem kolorem czerwonym.

[production]
phpSettings.display_startup_errors = 1
phpSettings.display_errors = 1
includePaths.library = APPLICATION_PATH "/../library"
bootstrap.path = APPLICATION_PATH "/Bootstrap.php"
bootstrap.class = "Bootstrap"
resources.frontController.controllerDirectory = APPLICATION_PATH "/controllers"
resources.layout.layoutPath = APPLICATION_PATH "/layouts/scripts"
resources.view[] = resources.db.adapter = PDO_MYSQL resources.db.params.dbname = "nazwa_bazy" resources.db.params.password = "haslo_bazy" resources.db.params.username = "urzytkownik_bazy" resources.db.params.host = "host"
[staging : production] [testing : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1 [development : production] phpSettings.display_startup_errors = 1 phpSettings.display_errors = 1

Następnie musimy zmodyfikować plik Bootstrap.php. Problem w tym, że najprawdopodobniej Zend Framework nie dokonuje połączenia z bazą danych dopóki nie jest ono absolutnie konieczne, co może być kłopotliwe przy sprawdzaniu czy połączenie jest prawidłowe, jednak można to obejść w taki sposób. Należy dopisać do naszego Bootsrtap.php następującą metodę niech to będzie _initDbNames(). Nasz przykładowy plik może wyglądać następująco

class Bootstrap extends Zend_Application_Bootstrap_Bootstrap
{
    protected function _initAutoload()
    {
        $autoloader = new Zend_Application_Module_Autoloader(array(
            'namespace' => '',
            'basePath'  => dirname(__FILE__),
        ));
        return $autoloader;
    }

	public function _initDbNames()
	{
		try {
			if ($this->hasPluginResource('db')){
				$db = $this->getPluginResource('db');
				$db->getDbAdapter()->query('SET NAMES UTF8');
			}
		}catch (Exception $e) {
    		echo "Blad polaczenia z baza danych: ".$e->getMessage() . PHP_EOL;
    		exit(0);
		}
	}
    protected function _initDoctype()
    {
        $this->bootstrap('view');
        $view = $this->getResource('view');
        $view->doctype('XHTML1_STRICT');
    }
}

Aby jednak ładowanie klas naszego modelu mogło następować automatycznie definiujemy funkcję _initAutoload(). Definiujemy ścieżkę, oraz przestrzeń nazw pozostawiamy pustą więc Zend automatycznie będzie przeglądał klasy modelu i ładował do pamięci wszystkie te których struktura odpowiada następującemu sposobie nazewnictwa. Przyjmijmy, że nasza tabela w bazie nosi nazwę “guestbook”, więc klasa ją obsługująca będzie się nazywać Model_Guestbook, gdyby, w przestrzeni nazw (namespace) była zdefiniowana taka wartość jak np. App_, to nasza klasa modelu musiała by się nazywać App_Model_Guestbook, jednak dla wygody myślę, że warto zostawiać ją pustą. Oczywiście pliki zawarte w folderze Model mogą mieć dowolne nazwy – dobrze jest jednak gdy nazwy plików modelu są takie same jak nazwy tabel w bazie danych (chyba nie muszę tłumaczyć dlaczego).

Autor siema \\ tagi: , , , , , , , ,



3 Odpowiedzi do “Przygotowanie plików do połączenia z bazą”

  1. kpolszewski napisał(a):

    Dla tych którzy faworyzują konsolę:

    zf.sh configure db-adapter “adapter=Pdo_Mysql&host=localhost&username=root&password=haslo&dbname=baza”

    to polecenie uzupełni nam application.ini

  2. Marcin napisał(a):

    Czy trzymanie haseł w application.ini jest bezpieczne? Jest jakaś alternatywa?

  3. Marcin napisał(a):

    He he he. Odpowiedź jest w następnym artykule. :)