Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ładowanie plików
wlamywacz
post
Post #1





Grupa: Zarejestrowani
Postów: 535
Pomógł: 27
Dołączył: 3.05.2005

Ostrzeżenie: (20%)
X----


Witam. Jestem w trakcie projektowania swojego pierwszego poważnego framweworka którego mam zamiar używać w swoich aplikacjach. Struktura katalogów i plików jest identyczna jak w ZF czyli:
aplication
- controllers
- models
- views
library
public

Zastanawia mnie jak wykonać w takim systemie tzw. autoload? Myślałem nad stworzeniem dodatkowego kontrolera który przejmował by za mnie ten problem. Działało by to w to w ten sposób:
  1. <?php
  2.  
  3. $myClass = loader getInstance('aplication_models_myClass');
  4.  
  5. ?>

Loader ładował by potrzebny plik z odpowiednią klasą i zwracał jej obiekt. Jak wy rozwiązujecie taki problem ?

Psuje kod, miało być:
$myClass = loader::getInstance('aplication_models_myClass');

Ten post edytował wlamywacz 21.09.2008, 16:08:33
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
LBO
post
Post #2





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Sedziwoj @ 23.09.2008, 11:09:08 ) *
Wiesz, nie mogę uwierzyć że robisz takie rzeczy, nie pomyślał bym, że to możesz napisać.
Przecież z jakiej abstrakcji bazy korzysta aplikacja powinno być w konfiguracji, a ta może być różna...
zaskoczyłeś mnie, na prawdę. Pisać o OOP i nie stosować jego zalet w takim miejscu.


Sedziwoj nie atakuj, nie atakuj (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Jak napisałem wcześniej modele u mnie to abstrakcja nad źródło danych, które może być PDO, PRopel czy mysql_*.
Więc chcąc to zmienić zmieniam tak samo konfig jak i modele. Nie wiem jak mam wykorzystać obiektowośc akurat w tym przypadku - modele pobieram fabryką.

  1. <?php
  2. $model = $this->context->getModel('User');
  3. ?>


a model wygląda tak (pisze na szybko w edytorze forum, więc bez fajerwerków (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ):

  1. <?php
  2. // w app/models/UserModel.class.php ładowane automatem w środowisku "development" i "production"
  3. class UserModel extends ProjectBaseModel {
  4.    public function getUserById($id)
  5.    {
  6.            // Uproszczone maksymalnie
  7.           $user = UserPeerretrieveByPk($id);
  8.          
  9.           return $user->toArray(BasePeerTYPE_FIELDNAME);
  10.           // Nie zwracam obiektów Propela, bo cała abstrakcja nie miałaby sensu.
  11.    }
  12. }
  13.  
  14. // a teraz chcę sobie potestować czyste PDO, bez ingerencji w istniejace modele
  15.  
  16. // w  app/models/UserModelPDO.class.php i ustawiam sobie w mapie (dla środowiska
  17. // testowego "development-pdo") klasę UserModel na ten plik
  18. class UserModel extends ProjectBaseModel {
  19.    public function getUserById($id)
  20.    {
  21.        // $this->pdo ustawione w ProjectBaseModel, pdo pobrane
  22.        // z kontektu $this->context->getDatabaseConnection();
  23.        $statement = $this->pdo->prepare('SELECT *  FROM users WHERE id = ?');
  24.        $statement->execute(array($id));
  25.        return $statement->fetch(PDOFETCH_ASSOC);
  26.    }
  27. }
  28. ?>


Rozumiesz już? To jest po prostu wygodne - nie chce mi sie pisać własnej fabryki i tyle.
Zauważ jak prosto moge zrobić i testować refactoring (spróbuj przepisać Propelowy projekt w Symfony na Doctrine (bez sfDatabaseFindera) (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif) ).

Chciałem pokazać zastosowanie w autoloaderze czułości na środowisko i tyle - przydatna sprawa.

Ten post edytował LBO 23.09.2008, 13:51:17
Go to the top of the page
+Quote Post

Posty w temacie
- wlamywacz   Ładowanie plików   21.09.2008, 16:05:39
- - Crozin   W ZF nazwa klasy jest równocześnie ścieżką do jej ...   21.09.2008, 20:03:53
- - LBO   Zależy w którą stronę chcesz pójść z autoloaderem....   21.09.2008, 20:12:38
- - ARJ   u mnie autoload opiera się na stworzonej mapie pli...   21.09.2008, 20:19:59
- - wlamywacz   Jeśli mógłbyś to wkleić na phpfi byłbym bardzo wdz...   21.09.2008, 20:27:57
- - ARJ   proszę: http://phpfi.com/355575 klasa nie ma komen...   21.09.2008, 20:39:45
- - LBO   Temat o którym pisałem wcześniej: Włączanie plików...   21.09.2008, 20:44:14
- - wlamywacz   Czytałem ten temat, dziękuje za klasę jutro ją prz...   21.09.2008, 20:46:19
- - likemandrake   Ja kiedyś rozwiązałem ten problem w taki sposób: ...   21.09.2008, 21:31:10
- - zimi   dorzuce może jeszcze swoje 3 grosze, w niektórych ...   22.09.2008, 16:21:27
- - wlamywacz   Nie rozumiem ? Właśnie o to chodzi że tak się ni...   22.09.2008, 18:00:58
- - LBO   Cytat(wlamywacz @ 22.09.2008, 19:00:5...   22.09.2008, 18:11:58
- - wlamywacz   Jednak załadowanie do nich odpowiednich plików mus...   22.09.2008, 18:48:59
- - zimi   CytatWłaśnie o to chodzi że tak się nie da bo mode...   22.09.2008, 19:45:39
- - wlamywacz   Doszliśmy już do tego rozwiązania I właśnie je wy...   22.09.2008, 19:57:23
- - LBO   Jeżeli w Twoim systemie masz podział na ...   22.09.2008, 20:08:23
|- - Sedziwoj   Cytat(LBO @ 22.09.2008, 21:08:23 ) I ...   23.09.2008, 10:09:08
- - likemandrake   LBO, mam rozumieć, że stworzyłeś sobie klasę, któr...   22.09.2008, 20:13:30
- - LBO   Cytat(likemandrake @ 22.09.2008, 21:13...   22.09.2008, 20:21:45
- - Cysiaczek   Ja kiedyś popełniłem takie co...   22.09.2008, 21:29:45
- - LBO   Cytat(Cysiaczek @ 22.09.2008, 22:29:4...   22.09.2008, 22:42:04
- - Cysiaczek   Widzisz, z symlinkmi to jest tak, że nic nie musis...   23.09.2008, 00:33:53
- - LBO   He he, spoko Cysiaczku. Wiem co to są symlink...   23.09.2008, 00:38:38
- - LBO   Cytat(Sedziwoj @ 23.09.2008, 11:09:08...   23.09.2008, 13:43:40
- - Sedziwoj   @LBO Może za ostro zareagowałem, ale tak to napisa...   23.09.2008, 15:31:22
- - LBO   Cytat(Sedziwoj @ 23.09.2008, 15:45:42...   23.09.2008, 15:37:00
|- - Sedziwoj   Cytat(LBO @ 23.09.2008, 16:37:00 ) Z ...   23.09.2008, 15:52:45
- - LBO   Cytat(Sedziwoj @ 23.09.2008, 16:52:45...   23.09.2008, 16:21:55


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 7.10.2025 - 22:41