Hallo zusammen
Was macht mehr sind bzw. ist "state of the art" bei einer Zuweisung.
Ich habe eine Person, welche einer Firma zugeordnet ist. Macht es jetzt Sinn alle Firmennamen in der Locallang zu speichern und anschliessend das Select zu befüllen oder eher statt Locallang eine Tabelle einzusetzen? Betrifft das Backend sowie das Frontend.
Was meint Ihr?
Besten Dank und Gruss
Coreblade
Das hat nichts mit "state of the art" zu tun.
Entscheide du:
Daten in der LL: Statischer Text, der sich eher nicht ändert
Daten in der Datenbank: Von Redakteuren und anderen Benutzern änderbarer Inhalt
Daten im TypoScript/HTML-Template: Von Administratoren änderbarer Inhalt
Danke für Deine Antwort. Sie hat mir sehr geholfen. 🙂
Habe nun noch gleich eine andere Frage:
Ich möchte ein Select mit Werten aus einer Tabelle befüllen.
Habe schon versucht das Ganze mit Dependency Injection zu lösen oder mit makeInstance. Aber ich komme einfach nicht an die Daten ran?
Wie macht man das?
Besten Dank
Coreblade
Mach im Controller ein findAll() und übergebe die Objekte in einer Variable an den View. Dort dann den Selectviewhelper befüllen.
Problem ist, dass die Objekte aus einer anderen Tabelle stammen:
Aktueller Controller ist Tabelle Club. Ich brauche aber die Daten der Tabelle See welche in 1:1 Beziehung mit Club steht.
Nachtrag:
Ich will dies erreichen:
$test = New Tx_IsClubmanager_Domain_Model_Lake();
$test->SetName("Test" );
$testarr = array();
$testarr[0] = $test;
Das Array testarr übergebe ich dann der View. Das muss doch irgendwie über das Repository des Lakes möglich sein? Aber ich befinde mich ja im Context vom ClubController bzw. ClubRepository:
/**
* clubRepository
*
* @var Tx_IsClubmanager_Domain_Repository_ClubRepository
*/
protected $clubRepository;
/**
* injectClubRepository
*
* @param Tx_IsClubmanager_Domain_Repository_ClubRepository $clubRepository
* @return void
*/
public function injectClubRepository(Tx_IsClubmanager_Domain_Repository_ClubRepository $clubRepository) {
$this->clubRepository = $clubRepository;
}
Oder sehe ich den Wald vor lauter Bäumen nicht mehr? Das Select soll einfach dynamisch die Daten von Lake holen.
Hoffe Ihr könnt mir helfen :o
Gruss Coreblade
Die Models abholen passiert ja normal so:
$this->view->assign('clubs',$this->clubRepository->findAll());
Die Dependency Injection sieht richtig aus. Wenn du in dem Controller per
$this->clubRepository->add($club);
dein Repository erweiterst kannst du sie per findAll() abholen. Du solltest dieses hinterlegen/abholen/filtern immer über das Repository machen und dafür keine eigenen Array-Konstrukte oÄ verwenden. Dann bleibt das alles transparent und ein Blick in deine Extension ist wie ein Blick in jede andere Extension nur mit anderen Namen.
Um die Daten mit der Datenbank zu synchronisieren muss die Speicherschicht passen, dazu brauchst du vieles mehr als nur das Repository, du brauchst auch viel config, T3 braucht schließlich ein Mapping von deinem Model zur Tabelle, das passiert in der ext_tables.php.
Hallo MajPay
Danke für Deine Antwort.
Innerhalb des Repository ist mir dies schon klar. Aber ich muss ja ein anderes Repository ansprechen. Ich muss das Lake Model abholen, welches im lakeRepository ist. Das Ganze muss ich vom clubController aus machen. Wenn ich aber das lakeRepository mit Dependency Injection wie das clubRepository reinhole, funktioniert das nicht... Any Idea?
Gruss Coreblade
Ok kann das Ganze nocheinmal ein bisschen mehr einschränken:
Wenn ich das lakeRepository mit der Dependency Injection (analog clubRepository) reinnehme, kann ich nur die funktion findByUid verwenden. Diese liefert die richtigen werte.
Alles andere wie z.B. findByName oder findAll funktioniert nicht bzw. ergibt kein Ergebnis. Bin langsam am verzweifeln? #angry# Das muss doch auch schon mal jemand anders angetroffen haben?
Du kannst beliebige Repositories per Dependency Injection in deinen Controller holen, das ist Sinn der Sache und sollte so funktionieren. Warum dein LakeRepository im ClubController nicht funktioniert kann man natürlich nicht sagen ohne den Code zu sehen, aber rein von Extbase her sollte das funktionieren.
Mein Code ist folgender:
<?php
/* * *************************************************************
* Copyright notice
*
* (c) 2012 Stefan Wenger
*
* All rights reserved
*
* This script is part of the TYPO3 project. The TYPO3 project is
* free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
* (at your option) any later version.
*
* The GNU General Public License can be found at
* http://www.gnu.org/copyleft/gpl.html.
*
* This script is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* This copyright notice MUST APPEAR in all copies of the script!
* ************************************************************* */
/**
*
*
* @package is_clubmanager
* @license http://www.gnu.org/licenses/gpl.html GNU General Public License, version 3 or later
*
*/
class Tx_IsClubmanager_Controller_ClubController extends Tx_Extbase_MVC_Controller_ActionController {
/**
* clubRepository
*
* @var Tx_IsClubmanager_Domain_Repository_ClubRepository
*/
protected $clubRepository;
/**
* injectClubRepository
*
* @param Tx_IsClubmanager_Domain_Repository_ClubRepository $clubRepository
* @return void
*/
public function injectClubRepository(Tx_IsClubmanager_Domain_Repository_ClubRepository $clubRepository) {
$this->clubRepository = $clubRepository;
}
/**
* lakeRepository
*
* @var Tx_IsClubmanager_Domain_Repository_LakeRepository
*/
protected $lakeRepository;
/**
* injectLakeRepository
*
* @param Tx_IsClubmanager_Domain_Repository_LakeRepository $lakeRepository
* @return void
*/
public function injectLakeRepository(Tx_IsClubmanager_Domain_Repository_LakeRepository $lakeRepository) {
$this->lakeRepository = $lakeRepository;
}
/**
* focusRepository
*
* @var Tx_IsClubmanager_Domain_Repository_FocusRepository
*/
protected $focusRepository;
/**
* injectFocusRepository
*
* @param Tx_IsClubmanager_Domain_Repository_FocusRepository $focusRepository
* @return void
*/
public function injectFocusRepository(Tx_IsClubmanager_Domain_Repository_FocusRepository $focusRepository) {
$this->focusRepository = $focusRepository;
}
/**
* action index
*
* @return void
*/
public function indexAction() {
$clubs = $this->clubRepository->findAll(); //--> Funktioniert
$this->view->assign('clubs', $clubs);
$lakes = $this->lakeRepository->findAll(); //--> Funktioniert nur wenn ich im Repository die findAll überschreibe und die Werte per normalem Query hole...
$this->view->assign('lakes', $lakes);
$focuses = $this->focusRepository->findAll(); //--> gleiches wie bei lake
$this->view->assign('focuses', $focuses);
}
}
?>
Habe Kommentare im Code geschrieben. Any Idea?
Danke im Voraus
Möglicherweise ein Schreibfehler. Es ist aber auch möglich, dass du nicht alle Getter und Setter gesetzt hast, das mag Extbase überhauptnicht.