Kontynuujemy naszą przygodę z Agavi! Czas na ORM. Wybieramy Doctrine.
Pobierzmy paczkę Doctrine-1.1.x.tgz i ją rozpakujmy. Przejdźmy do wypakowanego katalogu i dalej do katalogu lib. Przenieśmy teraz katalog Doctrine oraz plik Doctrine.php do biblioteki naszego projektu blog/libs. Czas na wstępną konfigurację. W pierwszym kroku edytujemy plik blog/app/config.php. Do include_path dodajemy naszą bibliotekę libs oraz konfigurację Doctrine.
ini_set('include_path', dirname(dirname(__FILE__)) . DIRECTORY_SEPARATOR . 'libs' . PATH_SEPARATOR . ini_get('include_path'));
AgaviConfig::set('doctrine.data_fixtures_path', AgaviConfig::get('core.app_dir') . '/data/fixtures');
AgaviConfig::set('doctrine.models_path', AgaviConfig::get('core.app_dir') . '/models');
AgaviConfig::set('doctrine.migrations_path', AgaviConfig::get('core.app_dir') . '/migrations');
AgaviConfig::set('doctrine.sql_path', AgaviConfig::get('core.app_dir') . '/data/sql');
AgaviConfig::set('doctrine.yaml_schema_path', AgaviConfig::get('core.app_dir') . '/schema');
AgaviConfig::set('doctrine.phptype', 'mysql');
AgaviConfig::set('doctrine.username', 'blogger');
AgaviConfig::set('doctrine.password', 'bloggie');
AgaviConfig::set('doctrine.hostspec', 'localhost');
AgaviConfig::set('doctrine.database', 'blog');
AgaviConfig::set('doctrine.dsn', AgaviConfig::get('doctrine.phptype') . '://' . AgaviConfig::get('doctrine.username') . ':' . AgaviConfig::get('doctrine.password') . '@' . AgaviConfig::get('doctrine.hostspec') . '/' . AgaviConfig::get('doctrine.database'));
W drugim kroku tworzymy nowe katalogi w naszej aplikacji:
blog/
app/
data/
fixtures/
sql/
migrations/
schema/
Teraz powiadommy Agavi, że chcemy korzystać z bazy danych. W pliku blog/app/config/settings.xml odnajdźmy zmienną konfiguracyjną use_database i ustawmy ją na true.
Kolejny krok to konfiguracja bazy danych w pliku blog/app/config/databases.xml. Zastępujemy całość podanym kodem:
<?xml version="1.0" encoding="UTF-8"?>
<ae:configurations xmlns:ae="http://agavi.org/agavi/config/global/envelope/1.0" xmlns="http://agavi.org/agavi/config/parts/databases/1.0">
<ae:configuration>
<databases default="doctrine">
<database name="doctrine" class="AgaviDoctrineDatabase">
<ae:parameter name="dsn">%doctrine.dsn%</ae:parameter>
<ae:parameter name="charset">utf8</ae:parameter>
<ae:parameter name="options">
<ae:parameter name="username">%doctrine.username%</ae:parameter>
<ae:parameter name="password">%doctrine.password%</ae:parameter>
</ae:parameter>
<ae:parameter name="load_models">%doctrine.models_path%</ae:parameter>
</database>
</databases>
</ae:configuration>
</ae:configurations>
Ostatni krok to utworzenie skryptu CLI. Utwórzmy plik doctrine.php w głównym katalogu naszego projektu. Umieśćmy w nim następujący kod:
<?php
require('./libs/agavi/agavi.php');
require('./app/config.php');
require_once('./libs/Doctrine.php');
spl_autoload_register(array('Doctrine', 'autoload'));
$conn = Doctrine_Manager::connection(AgaviConfig::get('doctrine.dsn'), 'doctrine');
$conn->setOption('username', AgaviConfig::get('doctrine.username'));
$conn->setOption('password', AgaviConfig::get('doctrine.password'));
Doctrine_Manager::getInstance()->setAttribute('model_loading', 'conservative');
$config = array(
'data_fixtures_path' => AgaviConfig::get('doctrine.data_fixtures_path'),
'models_path' => AgaviConfig::get('doctrine.models_path'),
'migrations_path' => AgaviConfig::get('doctrine.migrations_path'),
'sql_path' => AgaviConfig::get('doctrine.sql_path'),
'yaml_schema_path' => AgaviConfig::get('doctrine.yaml_schema_path')
);
$cli = new Doctrine_Cli($config);
$cli->run($_SERVER['argv']);
?>
Przetestujmy CLI w wierszu poleceń. Przejdźmy do katalogu naszego projektu i uruchommy skrypt wpisując php doctrine.php. Powinniśmy otrzymać w wyniku listę dostępnych poleceń.
Czas utworzyć bazę danych oraz użytkownika. Wybraliśmy MySQL, więc najlepiej skorzystać z phpMyAdmin. Tworzymy bazę danych blog oraz użytkownika blogger identyfikującego się hasłem bloggie. Utworzonemu użytkownikowi nadajemy wszystkie uprawnienia dla naszej bazy danych.
Możemy jeszcze raz przetestować CLI usuwając bazę danych za pomocą polecenia php doctrine.php drop-db oraz tworząc ponownie wpisując php doctrine.php create-db.
Odwiedźmy teraz w przeglądarce adres http://localhost/blog/pub/. Jeśli nie sypnie żadnym błędem, to mamy teraz dostęp do naszej bazy danych.
Podsumowując, zintegrowaliśmy z naszym projektem Agavi ORM Doctrine. Nasz projekt ma teraz następującą strukturę:
blog/
app/
cache/
config/
data/
fixtures/
sql/
lib/
log/
migrations/
models/
modules/
schema/
templates/
config.php
dev/
libs/
agavi/
Doctrine/
Doctrine.php
pub/
agavi.bat
build.properties
build.xml
doctrine.php
Paczkę z projektem możemy pobrać z http://www.agavi.org.pl/moj-pierwszy-projekt/integracja-agavi-z-doctrine.zip.
Już niebawem zaczniemy tworzyć szkielet panelu administracyjnego.


