Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Ładowanie modelu dla kontrolera tylko wypadku użycia
freeon
post
Post #1





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 26.05.2009

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


Zastanawiam się jak rozwiązać problem automatycznego ładowania modelu dla kontrolera tylko wtedy gdy bedzie choc raz użyty. Wolalbym tu uniknac wzorca fabryki bo nie chcialbm miec cos takiego
  1. $this->user=user::new();
chcialbym zeby $user byla to klasa ktora po dostepie do niej np. (
  1. $this->user->name=''
) zaladowala model user i podmienila siebie... nie wiem czy sie jasno wyrazilem ale jestem po nie przespanej nocy (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 18)
marcio
post
Post #2





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Hmmm czekaj jesli dobrze rozumiem importuj plik modelu za pomoca jakiesj klasy ktora bedzie implementowala ta funkcjonalnosc w __get().

Chyba ze zle zinterpretowalem twoje pytanie.
Go to the top of the page
+Quote Post
freeon
post
Post #3





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 26.05.2009

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


Dobrze zrozumialeś tylko zastanawiam sie czy mozna to jakos ominanc calkowicie podmienic klasy tylko w przypadku uzycia tu nie chodzi tylko o metode __get modele sa bardziej rozbudowane jesli nie wykombinuje nic bede musial wszystkie magiczne metody tak przechwycic
Go to the top of the page
+Quote Post
marcio
post
Post #4





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Jak dobrze pokombinujesz z __get() i ewentualnie __call() uzyskasz to co chcesz.
U mnie jak chce odwolac sie do jakiegos obiektu i plik jest w jakims tam katalogu i nie zostal includowany robie tak jak ty to opisales:
  1. $this -> klasa -> metoda(); //etc.....

Wtedy moj Fw przeszukuje katalogi az do napotkania pliku klasa.php gdy go napotka includuje go i tworzy obiekt klasa i zwraca mi go.
Go to the top of the page
+Quote Post
cojack
post
Post #5





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


A ja sobie wczytuję ręcznie modele do kontrolera, imo mniej zabawy.
Go to the top of the page
+Quote Post
freeon
post
Post #6





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 26.05.2009

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


No tak niby mniej zabawy ale potem fajnie by bylo gdyby model byl ladowany automatycznie wtedy gdy jest potrzebny zaoszczedzilbym jedna linijke przy kazdym kontrolerze (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
cojack
post
Post #7





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


A co jeżeli jest już załadowany? ;] Musiałbyś go rejestrować w jakimś singletonie a później sprawdzać czy jest zarejestrowany, to jest grzebanie w tablicach, dodatkowo opóźnia wykonanie kodu, a tak wczytujesz i się nie przejmujesz.
Go to the top of the page
+Quote Post
Crozin
post
Post #8





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Cytat
edna linijke przy kazdym kontrolerze
Chyba raczej tyle linijek ile modeli używasz w danym kontrolerze.
IMO lepiej jest jednak to ręcznie robić - lepsza czytelność, mniej kombinowania, a potencjalny zysk w postaci dwóch, trzech linijek kodu jest niewielki.

Ja generalnie w przypadku obiektów modeli w ogóle nie wykorzystuję pól obiektu kontrolera - wolę to mieć w zmiennej lokalnej i ew. przekazać przez referencję, jeżeli potrzebuję go w innej metodzie.
  1. public function ...(){
  2. $abc = new Abc();
  3. $def = Def::getSth('dsd');
  4.  
  5. //i w abc, def masz dostęp do dwóch modeli
  6. }
Jakoś nie specjalnie dużo kombinowania, a kod jest dużo czytelniejszy.
Go to the top of the page
+Quote Post
marcio
post
Post #9





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat(cojack @ 3.10.2009, 15:02:29 ) *
A co jeżeli jest już załadowany? ;] Musiałbyś go rejestrować w jakimś singletonie a później sprawdzać czy jest zarejestrowany, to jest grzebanie w tablicach, dodatkowo opóźnia wykonanie kodu, a tak wczytujesz i się nie przejmujesz.

Jak cos to bardziej pasowalby Register a nie singleton wedlug mnie.

A dwa to sa ulamki ulamkow mili-sekund......
Go to the top of the page
+Quote Post
cojack
post
Post #10





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


marcio a kto broni używać registera w singletonie? ;]

w Doctrine jest zrobione tak że wszystkie modele są wczytywane od razu, przy załadowaniu strony, też ciekawe.
Go to the top of the page
+Quote Post
witul
post
Post #11





Grupa: Zarejestrowani
Postów: 29
Pomógł: 0
Dołączył: 24.08.2007

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


hmmm
jest juz troche pozno i moge nie zalapac ocb w temacie (IMG:style_emoticons/default/biggrin.gif)
ale z tego co rozumiem to problem tkwi w odpowiedniej implementacji autoloadera (IMG:style_emoticons/default/snitch.gif)
o autoloaderach sa rozne ciekawe tematy, poszukaj

ja mam autoloader tak rozwiazany (+ mapki na zasadzie "nazwa_klasy"=>"sciezka_do_pliku"):

  1. class Autoloader{
  2. private static $map=array();
  3. private static $included=array();
  4. public function __construct(){
  5. $this->loadMaps();
  6. }
  7. private function loadMaps(){
  8. $components_dir=array();
  9. $current_mod_components_dir=APPPATH.'components/';
  10. foreach(new DirectoryIterator($current_mod_components_dir ) as $v){
  11. if(!$v->isDot() && $v->isDir())
  12. $components_dir[]=$v->getPathname().'/config/maps';
  13. }
  14. $maps_dirs=array(
  15. SYSPATH.'config/maps/',
  16. APPPATH.'config/maps/');
  17. $maps_dirs=array_merge($maps_dirs,$components_dir);
  18. foreach($maps_dirs as $map_dir){
  19. foreach(new DirectoryIterator($map_dir) as $map){
  20. if(!$map->isDot() && !$map->isDir()){
  21. include $map->getPathname();
  22. self::$map=array_merge($map,self::$map);
  23. }
  24. }
  25. }
  26. self::$map=array_unique(self::$map);
  27. }
  28. public function load($class_name){
  29. if(!in_array($class_name,self::$included) && isset(self::$map[$class_name])){
  30. include self::$map[$class_name];
  31. self::$included[]=$class_name;
  32. return self::$map[$class_name];
  33. }
  34. else return false;
  35. }
  36. }



Do tego cache'owanie map plikow i nie martwimy sie o zadne ladowania plikow

Pozdrawiam

Ten post edytował witul 4.10.2009, 03:37:50
Go to the top of the page
+Quote Post
freeon
post
Post #12





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 26.05.2009

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


Tylko chodzi o to że auto loader klas jest tu zastowany... kontroler jest zawsze zaladowany a chodzi oto zeby model byl ladowany w ten sposob ze byla by to jakas mala klasa ktora po pierwszym dostepnie do niej podmienila by siebie na wlasciwa a jesli model nie byl by uzyty to nie robila by nic. Narazie mam zrobioen to w ten sposob ze mam przechwytywane magiczne metody typu _call itp.. ale to nie jest wygodny sposob gdyz np. model dostaje zmienne w tablicy a nie typu $var1,$var2...... Chyba jednak zrobie tak ze za kazda raza do kontrolera musi byc ladowany model..
Go to the top of the page
+Quote Post
marcio
post
Post #13





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


Cytat
model dostaje zmienne w tablicy a nie typu $var1,$var2......

Teraz nie pamietam gdzie ale chyba w kohanej widzialem takie rozwiazanie ze mieli funkcje w niej switch i na zasadzie ile dana funkcja miala argumentow byl foreach() na tablice i potem elementy byly wkladane do funkcji, nie wiem czy mnie zrozumiales, jak znajde ten plik to ci podam.
Go to the top of the page
+Quote Post
freeon
post
Post #14





Grupa: Zarejestrowani
Postów: 8
Pomógł: 1
Dołączył: 26.05.2009

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


Ciekawe rozwiązanie nie wpadlem na to..... po południu zaraz to przetestuje powinno dzialac.... ale dalej mnie zastanawia fakt czy nie mozna tego jakos ominąć aktywowanie modeli
Go to the top of the page
+Quote Post
marcio
post
Post #15





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


  1.  
  2. $args = func_num_args();
  3. $argv[] = func_get_args();
  4.  
  5.  
  6. switch($args) {
  7.  
  8.   case 0:
  9.            jakas_funkcja();
  10.            break;
  11.  
  12.   case 1:
  13.            jakas_funkcja($argv[0]);
  14.            break;
  15.  
  16.   case 2:
  17.            jakas_funkcja($argv[1], $argv[2]);
  18.            break;
  19.  
  20. }
  21.  


Itp zalezy ile dana funckja ma miec parametrow cos takie to taki wzor powinien dzialac.

Ten post edytował marcio 4.10.2009, 19:29:22
Go to the top of the page
+Quote Post
cojack
post
Post #16





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

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


marcio, co Ty q... za herezje wypisujesz? Pobierasz argumenty funkcji bez funkcji O_o I ten func_num_args, to imo zbyteczność, func_get_args i cout i święto lasu... ale co Ty tu tworzysz?

@edit

Crozin no szał pał.

Ten post edytował cojack 4.10.2009, 22:52:56
Go to the top of the page
+Quote Post
Crozin
post
Post #17





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Taa... call_user_func_array - jest bajer co nie?
Go to the top of the page
+Quote Post
marcio
post
Post #18





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

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


@cojack palancie wiesz co to wzor?




@Crozin niestety znam ta funkcja sam ja uzywam nie tylko ty ja znasz nie przyszla mi niestety do glowy wiec wybacz.




Cytat
Pobierasz argumenty funkcji bez funkcji O_o I ten func_num_args, to imo zbyteczność, func_get_args i cout i święto lasu... ale co Ty tu tworzysz?


Qur** a widzisz w tym jakas roznice, bo ja nie oprocz tego ze ty skorzystasz z innych funkcji.

Go to the top of the page
+Quote Post
nospor
post
Post #19





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
@cojack palancie wiesz co to wzor?
czy cojak cie wyzwal ze tak mu sie odszczekujesz? Bo ja nie zauwazylem tego.
+10 z moderką
Go to the top of the page
+Quote Post

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: 22.08.2025 - 18:58