Nedari se mi rozchodit Akrabat.forms

Upozornění: Tohle vlákno je hodně staré a informace nemusí být platné pro současné Nette.
KONY
Člen | 16
+
0
-

Zdravim, nedari se mi rozhodit akrabat.forms :(
Po prihlaseni demo/xxx mi vyhodi:

InvalidArgumentException
Argument passed to SmartCachingIterator::__construct must be an array or interface Iterator provider, DibiFluent given.

na radku:

Line 51: throw new InvalidArgumentException(„Argument passed to " . __METHOD__ . " must be an array or interface Iterator provider, " . (is_object($iterator) ? get_class($iterator) : gettype($iterator)) .“ given.");

Chci se naucit pracovat s Nette a nevim, kde delam chybu.
Diky vsem za pomoc.

KONY>

Honza Marek
Člen | 1664
+
0
-

Na první pohled tam nejspíš někde chybí ->execute().

Jod
Člen | 701
+
0
-

Na dibi fluent treba najprv zavolať (ako honza hovorí) fetch, fetchAll, fetchSignle, fetchAssoc, fetchPairs.. a vrátený výsledok pchať do foreach. Alebo miesto DibiFluent použi DibiDataSource, resp. $fluent->toDataSource();

KONY
Člen | 16
+
0
-

Ale ta chyba je v:
File: E:\wwwroot\akrabat.forms\libs\Nette\SmartCachingIterator.php Line: 51

Nemam odvahu se hrabat primo v Nette.
A v ukazkovem prikladu jsem nic nemenil (krome cesty k libs adresari).

KONY>

Editoval KONY (9. 3. 2009 12:20)

Jod
Člen | 701
+
0
-

Tá chyba neni tam, len ten objekt vyhodí výjimku, pretože doňho pcháš blbosti :D . SmartCachingIterátor sa používa pri foreach v curlyBrackets na to, keď chceš zistiť či ide o alternatívny riadok myslím.

Proste nedávaj do foreach DibiFluent ale výsledok z neho, DibiResult, alebo DibiDataSource.

Editoval Jod (9. 3. 2009 12:37)

Jod
Člen | 701
+
0
-

Chyba je v posvätnom akrabate :

//miesto
$this->template->albums = $album->findAll()->orderBy('artist')->orderBy('title');
//toto
$this->template->albums = $album->findAll()->orderBy('artist')->orderBy('title')->fetchAll();

Ale netestoval som :D

KONY
Člen | 16
+
0
-

Uz to funguje. Diky moc :)

Jod
Člen | 701
+
0
-

Tak ako pozerám DibiFluent tak chyba neni v kóde, ale asi v starej verzii Dibi, kedže na api DibiFluent implementuje IDataSource (getIterator a count), takže by ho malo brať vo foreach.

Treba si updatnúť Dibi na novú verziu.

Ďakujem Davidovi za túto feature =)

Editoval Jod (9. 3. 2009 13:27)

David Grudl
Nette Core | 8154
+
0
-

„posvätny akrabat“ :-))