Anfängerfrage: Repository gibt nur Müll zurück
| Autor | Nachricht |
|---|---|
|
Verfasst am: 03. 07. 2012 [17:22]
|
|
|
qualle85
Themenersteller
Dabei seit: 11.05.2009
Beiträge: 61
|
Hi, nehme meine ersten Anläufe mit Extbase und Fluid und kommt nicht weiter. Ich habe einen tx_testext_Controller_ProductinfoController.php mit PHP public function initializeAction() {
}
public function indexAction() {
$productcategoryRepository = t3lib_div::makeInstance('tx_testext_Domain_Repository_ProductcategoryRepository');
$productcategories = $productcategoryRepository->findAll();
print_r($productcategories);
}und einem leerem ProductcategoryRepository.php: PHP class tx_testext_Domain_Repository_ProductcategoryRepository extends Tx_Extbase_Persistence_Repository { }Allerdings steckt in $productcategories nicht wie erwartet meine Produktkategorien sondern folgendes (Auszug): HTML Tx_Extbase_Persistence_QueryResult Object ( [warning:Tx_Extbase_Persistence_QueryResult:private] => You should never see this warning. If you do, you probably used PHP array functions like current() on the Tx_Extbase_Persistence_QueryResult. To retrieve the first result, you can use the getFirst() method. [dataMapper:protected] => Tx_Extbase_Persistence_Mapper_DataMapper Object ( [identityMap:protected] => Tx_Extbase_Persistence_IdentityMap Object ( [objectMap:protected] => Tx_Extbase_Persistence_ObjectStorage Object ( [warning:Tx_Extbase_Persistence_ObjectStorage:private] => You should never see this warning. If you do, you probably used PHP array functions like current() on the Tx_Extbase_Persistence_ObjectStorage. To retrieve the first result, you can use the rewind() and current() methods. [storage:protected] => Array ( ) [isModified:protected] => ) [uuidMap:protected] => Array ( ) ) [reflectionService:protected] => Tx_Extbase_Reflection_Service Object ( [initialized:protected] => 1 [dataCache:protected] => t3lib_cache_frontend_VariableFrontend Object ( [useIgBinary:protected] => [identifier:protected] => cache_extbase_reflection [backend:protected] => t3lib_cache_backend_DbBackend Object ( [cacheTable:protected] => tx_extbase_cache_reflection [tagsTable:protected] => ... Wenn ich die findAll()-Methode von Hand implementiere kann ich ein eigens befülltes Array übergeben aber weiter komme ich nicht. Müsste extbase nicht die findAll()-Methode über das Persistence-Repository bereitstellen? Danke für jeden Hinweis |
|
Verfasst am: 04. 07. 2012 [06:53]
|
|
|
ralfbs
Dabei seit: 02.12.2011
Beiträge: 3
|
Hi, ist denn die storagePid richtig gesetzt? Es müsste etwa folgendes in TSConfig stehen: TYPOSCRIPT plugin.tx_testext_Controller_ProductinfoController.persistence.storagePid = nUnd befinden sich unter der pid auch wirklich records? Wenn das alles ok ist, kannst Du die $productcategories über die View debuggen: PHP public function indexAction() {
$productcategoryRepository = t3lib_div::makeInstance('tx_testext_Domain_Repository_ProductcategoryRepository');
$productcategories = $productcategoryRepository->findAll();
$this->view->assign('productcategories',$productcategories);
}Und in Index.html: PHP <f:debug title="Debug of productcategories">{productcategories}</f:debug> Certified TYPO3 Entwickler
http://www.hr-interactive.de/typo3entwicklung/ |
|
Verfasst am: 04. 07. 2012 [12:03]
|
|
|
qualle85
Themenersteller
Dabei seit: 11.05.2009
Beiträge: 61
|
Hallo und Danke für die Antwort. Hat mich einen Schritt näher an das Problem gebracht. Ich bekomme von der Abfrage kein Array sonder ein QueryResult Objekt zurück: PHP #1: PHP Catchable Fatal Error: Object of class Tx_Extbase_Persistence_QueryResult could not be converted to string in ... Die StoragePid hab ich nun gesetzt (davon stand allerdings nichts in meim Buch PHP public function indexAction() {
$config = $this->configurationManager->getConfiguration(Tx_Extbase_Configuration_ConfigurationManagerInterface::CONFIGURATION_TYPE_FRAMEWORK);
$productcategoryRepository = t3lib_div::makeInstance('Tx_JaReVoMCShop_Domain_Repository_ProductcategoryRepository');
$productcategories = $productcategoryRepository->findAll();
var_dump($productcategories);
$this->view->assign('productcategories', $config['persistence']['storagePid']); // stimmt
}Das mit f:debug hat ich zuerst auch aber dann is der Browser wegen dem vielen Datenkruscht abgeschmiert Was stimmt n da nicht?! |
|
Verfasst am: 04. 07. 2012 [12:09]
|
|
|
ralfbs
Dabei seit: 02.12.2011
Beiträge: 3
|
versuch mal das folgende: 1. das var_dump(...) aus der indexAction entfernen. Je nach Inhalt stolpert Extbase hierüber und zeigt nichts mehr an. 2. Hast Du die findAll() methode im Repositry angepasst? Ein Custom query lässt sich nicht zurück geben, sondern erst das Ergebnis des execute(): PHP return $customQuery->execute() Viel Erfolg! Certified TYPO3 Entwickler
http://www.hr-interactive.de/typo3entwicklung/ |
|
Verfasst am: 04. 07. 2012 [12:28]
|
|
|
qualle85
Themenersteller
Dabei seit: 11.05.2009
Beiträge: 61
|
Ja genau ohne var_dump kommt nichts mehr. Nein hatte ich nicht weil laut "TYPO3 Extensions mit Extbase und Fluid" reicht ein leeres Repository um auf die findAll()-Methode zugreifen zu können. Hab se jetzt mal rein: PHP /**
* A repository for Productcategories
*/
class tx_testext_Domain_Repository_ProductcategoryRepository extends Tx_Extbase_Persistence_Repository {
public function findAll() {
$query = $this->createQuery();
return $query->execute();
}
}Bringt allerdings das gleiche Ergebnis: Ein QueryResult Objekt. Wenn ich "return array('1' => 2); " zurückgebe gehts also die Zuweisung scheint zu tun. |
|
Verfasst am: 05. 07. 2012 [08:19]
|
|
|
kainobi
Dabei seit: 21.04.2008
Beiträge: 131
|
Schon mal geguckt was Tx_Extbase_Persistence_QueryInterface::execute() überhaupt zurückliefern _soll_? Genau, ein QueryResult: PHPDoc schrieb: @return Tx_Extbase_Persistence_QueryResultInterface|array The query result object or an array if $this->getQuerySettings()->getReturnRawQueryResult() is TRUE Ein QueryResult enthält wie der Name schon sagt das Ergebnis der Query Darüber kann man ganz normal iterieren als ob es ein Array wäre... |
|
Verfasst am: 05. 07. 2012 [11:17]
|
|
|
qualle85
Themenersteller
Dabei seit: 11.05.2009
Beiträge: 61
|
Yess - danke!! Ich hab ja erst versucht mir das QueryResult mit <f:debug> anzuschauen aber das ging nicht Fatal error: Allowed memory size of 536870912 bytes exhausted (tried to allocate 139227771 bytes) in Das Fluid <f:for> hab ich als einfaches for($i;$limit,$iterator){} gesehen, was ja normal nicht mit Objekten umgehen kann. Das war dann jetzt mein Knoten im Kopf.
|
|
Verfasst am: 05. 07. 2012 [11:46]
|
|
|
kainobi
Dabei seit: 21.04.2008
Beiträge: 131
|
qualle85 schrieb: Das Fluid <f:for> hab ich als einfaches for($i;$limit,$iterator){} gesehen, was ja normal nicht mit Objekten umgehen kann. Das war dann jetzt mein Knoten im Kopf. ![]() Das ist es grundsätzlich auch, aber das QueryResult implementiert Countable, Iterator, ArrayAccess, deshalb kann man damit umgehen wie mit einem Array. D.h. du kannst z.B. auch im PHP ganz normal mit foreach drüber iterieren... |
|
Verfasst am: 05. 07. 2012 [11:58]
|
|
|
qualle85
Themenersteller
Dabei seit: 11.05.2009
Beiträge: 61
|
WoW Echt gut. Danke! |



