Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [OPT 1.1.5] Jakie interfejsy dla obiektu aby mógł być iterowany w section jak array?
tornax
post
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 11.10.2006

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


Mam problem z iterowaniem w OPT 1.1.5 obiektów które mają się zachowywać jak tablice (array).

(Narazie nie zamiejszczam wszystkich definicji klas ponieważ to zazwyczaj odstrasza od dalszego czytania)

Mam klasę która ma taki oto nagłówek
  1. class ormcollection implements SeekableIterator, ArrayAccess, Countable

oraz kawałek kodu który zwraca obiekt tej klasy (linijka 1.) oraz ładuje do odpowiedniej sekcji w templatce (linijka 2.)
  1. $data = configurator::finder()->getAll();
  2. $this->view->assign('configurator', $data);

obiekt $data (klasa ormcollection) przechowywuje w prywatnej tablicy obiekty klasy configurator, które odzwierciedlają poszczególne rekordy w bazie danych
  1. class configurator extends orm {
  2.  
  3. public $name;
  4. public $active = 0;
  5.  
  6. public function __construct(){
  7. parent::__construct('configurator');
  8. }
  9.  
  10. public static function finder($className=__CLASS__){
  11. return parent::finder($className);
  12. }
  13. }

Teraz templatka wygląda do tego banalnie
  1. {section=configurator}
  2. {$configurator.name}
  3. {/section}

... ale nic nie generuje ... więc dla sprawdzenia czy działa iteracja i są pobierane dane wrzuciłem pare linijek do testu
  1. $data = configurator::finder()->getAll();
  2.  
  3. var_dump('foreach');
  4. foreach($data as $r){
  5. var_dump($r['name'], $r->name);
  6. }
  7.  
  8. var_dump('for');
  9. for($i=0; $i < count($data); $i++){
  10. var_dump($data[$i]['name'], $data[$i]->name);
  11. }
  12.  
  13. $this->view->assign('configurator', $data);

z wynikiem
  1. string(7) "foreach"
  2. string(10) "Deskorolki"
  3. string(10) "Deskorolki"
  4. string(12) "Poduszkowiec"
  5. string(12) "Poduszkowiec"
  6. string(3) "for"
  7. string(10) "Deskorolki"
  8. string(10) "Deskorolki"
  9. string(12) "Poduszkowiec"
  10. string(12) "Poduszkowiec"

Iteracja działa i zwraca wyniki ale nie w OPT, aby upewnić się, że samo OPT działa wykonałem taki test
  1. $this->view->assign('configurator', array(array('name'=>'pies'), array('name'=>'kot')));

rezultat
  1. pieskot

Test co prawda na tablicach ale przynjmniej wiem, że przekazuje zmienne. Moje podejżenie jest takie, że w ormcollection brakuje jakiegoś dodatkowego interfejsu ale nie potrafię powiedzieć jakiego bo ze wszystkimi obecnymi pętle for i foreach działąją bez problemu.

Czy ktoś ma może jakiś pomysł ?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
tornax
post
Post #2





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 11.10.2006

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


@Zyx, Bóg mi świadkiem, że gdybym nie musiał to bym się nie męczył.

W ramach projektu który został mi przydzielony muszę wykonać poważne zmiany w funkcjonalności pewnego sklepu internetowego, takiego który jeszcze był pisany z użyciem OPT 1.1.2 (aktualizacje w między czasie zrobiłem).

Ponieważ dotychczasowy sposób obsługi modelu lekko mówiąc ssie potrzebowałem napisać sobie coś sensowniejsego - wiec mam taki prosty ORM (pisany tak w myśl pomysłu TActiveRecord z Prado Framework) wykorzystujący dotychczasowy kod aby na wszelki wypadek nic się nie rozkraczyło, nie było konieczności podpisanania jakiegoś zewnętrznego ORM (kupa roboty sklep juz jest bardzo rozbudowany).

Long story short: sodoma i gomora i ciskanie gromami


Może mógłbyś mnie pokierować gdzie przychodzące do sekcji zmienne są obsługiwane? Podejżewam, że sprawdzane jest czy zmienna jest obiektem a nie sprawdzane jest czy implemntuje jakieś iteratory w konsekwencji obiekt nie jest obsługiwany jako tablica. Modyfikacja zapewne góra kilku linijek (mam nadzieje), a jak kojarze to gałąź 2.x nie jest kompatybilna wstecznie z 1.x

Ten post edytował tornax 25.02.2011, 14:42:29
Go to the top of the page
+Quote Post

Posty w temacie


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: 27.12.2025 - 15:01