Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Mojavi 2.0 + AdoDB filter
Forum PHP.pl > Forum > PHP > Pro > Archiwum Pro
Meijin
Potrzebowałbym działający przykład wykorzystania filtra AdoDB do wersji 2 mojavi. Na forum mojavi nie znalazłem nic pełnego.

Jak w ogóle tworzycie warstwę modelu z użyciem Mojavi ?
Leezard
Ja uzywam Mojavi 2.0 i ADOdb takze mam nadizeje ze moge pomoc. Tzn nie wiem czy chodzi ci o filtr globalny do bazy danych, czy chcesz tworzyc polaczenia bezposrednio w modelu. Z tego co wiem (z opinii z forum) to ten drugi sposob jest lepszy - wprowadza calkowita niezaleznosc modelu od innych czesci aplikacji.

W mojavi 2.0 nie ma czegosc takiego jak model, dlatego tworze wlasne klasy (nie extenduje niczego, nic nie przeciazam), wrzucam je do LIB_DIR/models, a pozniej w akcji i widoku odpowiednio includuje plik i dzialam na modelu. Aha no i jeszcze ostatnio podopisywalem sobie Singletony do moich modeli.

BTW

na forum Mojavi jest chyba gotowy filtr do ADOdb, ale przestalem go uzywac bo wtedy model nie byl calkowicie niezalezny, bo jako parametr w konstruktorze musial przyjnowac id polaczenia, a w momencie jesli bysmy chcieli zamienic baze na np XML to polaczenie nie jest nam potrzebne.

jak wroce do domu z zajec to podrzuce ci tego filtra jak chcesz
Meijin
Cytat(Leezard @ 2005-03-14 07:49:34)
jak wroce do domu z zajec to podrzuce ci tego filtra jak chcesz

Będę bardzo wdzięczny.

Pozdrawiam.
Leezard
no wiec tak:

1. w webapp/lib wrzucilem caly katalog adodb
2. do webapp/config wrzucilem config.Adodb,php (zawartosc nizej)
3. do katalogu opt/filters (powyzej webapp) wrzucilem AdodbFilter.class.php

a teraz pliki:

config.Adodb.php:
  1. <?php
  2.  
  3. // ----- ADODB INITIALIZATON -----
  4.  
  5. define('ADODB_DIR', '/home/leezard/framework/webapp/lib/adodb/');
  6. define('ADODB_CACHE_DIR', '/home/leezard/framework/webapp/cache');
  7. define('ADODB_DRIVER', 'mysql');
  8. define('ADODB_DB_HOST', 'localhost');
  9. define('ADODB_DB_USER', 'user');
  10. define('ADODB_DB_PASS', 'password');
  11. define('ADODB_DB_NAME', 'database');
  12. require_once(ADODB_DIR .'adodb.inc.php');
  13.  
  14. ?>


AdodbFilter.class.php:
  1. <?php
  2.  
  3. class AdodbFilter extends Filter
  4. {
  5. function execute (&$filterChain, &$controller, &$request, &$user)
  6. {
  7.  $loaded = $request->getAttribute('AdodbFilter');
  8.  if ($loaded == NULL)
  9.  {
  10. require_once(ADODB_DIR . 'adodb.inc.php');
  11.  
  12. $db_host = ( isset($this->params['host']) )
  13.  ? $this->params['host']
  14.  : ADODB_DB_HOST;
  15.  
  16. $db_user = ( isset($this->params['user']) )
  17.  ? $this->params['user']
  18.  : ADODB_DB_USER;
  19.  
  20. $db_pass = ( isset($this->params['pass']) )
  21.  ? $this->params['pass']
  22.  : ADODB_DB_PASS;
  23.  
  24. $db_db = ( isset($this->params['db']) )
  25.  ? $this->params['db']
  26.  : ADODB_DB_NAME;
  27.  
  28. $request->setAttribute('AdodbFilter', TRUE);
  29. $ADODB_CACHE_DIR = ADODB_CACHE_DIR;
  30. $dbconn = NewADOConnection(ADODB_DRIVER);
  31. $res = $dbconn->Connect($db_host, $db_user, $db_pass, $db_db);
  32. if ($res == FALSE)
  33. {
  34. // przekierowanie jak sie nie udalo polaczyc
  35. } else
  36. {
  37.  $request->setAttributeByRef('dbconn', $dbconn);
  38.  $filterChain->execute($controller, $request, $user);
  39.  $dbconn->Close();
  40. }
  41. $request->removeAttribute('AdodbFilter');
  42.  } else
  43.  {
  44. $filterChain->execute($controller, $request, $user);
  45.  }
  46. }
  47. }
  48.  
  49. ?>


mala zmiana w webapp/GlobalFilterList.class.php (ja mam jeszce filtr ExecutionTime):
  1. <?php
  2.  
  3. require_once(FILTER_DIR . 'ExecutionTimeFilter.class.php');
  4. require_once(FILTER_DIR . 'AdodbFilter.class.php');
  5.  
  6. class GlobalFilterList extends FilterList
  7. {
  8.  
  9. /**
  10.  * Create a new GlobalFilterList instance.
  11.  *
  12.  * @param controller Controller instance.
  13.  */
  14.  
  15. function & GlobalFilterList ()
  16. {
  17. $this->filters['ExecutionTimeFilter'] =& new ExecutionTimeFilter;
  18. $this->filters['AdodbFilter'] =& new AdodbFilter;
  19.  }
  20.  
  21. /**
  22.  * Register a filter.
  23.  *
  24.  * @param filterChain FilterChain instance.
  25.  */
  26. function registerFilters (&$filterChain, &$controller, &$request, &$user)
  27. {
  28.  /* register filter instances here */
  29.  
  30.  $filterChain->register($this->filters['ExecutionTimeFilter']);
  31.  $filterChain->register($this->filters['AdodbFilter']);
  32. }
  33.  
  34. }
  35.  
  36. ?>


i w config.php w webapp (dodaj takie cos)
w katalogu webapp/config trzymam configi dla Adodb, Smarty i innych rzeczy (tak zeby byly w jednym miejscu)
  1. <?php
  2.  
  3. define('MOJAVI_CFG_DIR', '/home/leezard/framework/webapp/config/');
  4. require_once(MOJAVI_CFG_DIR . 'config.Adodb.php');
  5.  
  6. ?>



no i zmien sciezki w configu adodb winksmiley.jpg powinno dzialac winksmiley.jpg
aha no i w akcji obiekt adodb pobeirasz przez $request->getAttribute('dbconn');

pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.