Zum Inhalt springen

Per Extbase Extension das starttime feld auslesen

Erstellt am 13. Mai 2014 · 4 Antworten · letzte Antwort am 15. Mai 2014

Tags: Frage

mmaxmm ·

Hi,
ich würde gerne per Extbase Extension das starttime feld aus der Datenbank auslesen. Das Model heißt Kunden und ich habe bereits properties und die entsprechenden getter und setter erstellt. Im TCA Kunden steht bereits folgendes:

		'starttime' => array(
			'exclude' => 1,
			'l10n_mode' => 'mergeIfNotBlank',
			'label' => 'LLL:EXT:lang/locallang_general.xlf:LGL.starttime',
			'config' => array(
				'type' => 'input',
				'size' => 13,
				'max' => 20,
				'eval' => 'datetime',
				'checkbox' => 0,
				'default' => 0,
				'range' => array(
					'lower' => mktime(0, 0, 0, date('m'), date('d'), date('Y'))
				),
			),
		),

Im Backend unter "Log" bekomme ich zusätzlich folgende Fehler:

Core: Error handler (FE): PHP Warning: in_array() expects parameter 2 to be array, boolean given in C:\xampp\htdocs\typo3mm\typo3\sysext\extbase\Classes\Persistence\Generic\Mapper\DataMapper.php line 231

Core: Error handler (FE): PHP Warning: class_parents(): object or string expected in C:\xampp\htdocs\typo3mm\typo3\sysext\extbase\Classes\Persistence\Generic\Mapper\DataMapper.php line 231

Im Frontend steht folgendes:

Could not determine the child object type.

Hat jemand eine Idee was ich noch vergessen haben könnte?

jenses ·

Am obigen TCA-Schnipsel gibt es nichts auszusetzen, der ist so korrekt.
Für deine Frontend-Fehlermeldungen wäre eher dein Model interessant...

mmaxmm ·

Hier mein Model:

<?php
namespace Mm\MmKih\Domain\Model;

/**
 * Kunden
 */
class Kunden extends \TYPO3\CMS\Extbase\DomainObject\AbstractEntity {

	/**
	 * kunde
	 * 
	 * @var string
	 */
	protected $kunde = '';

	/**
	 * personen
	 * 
	 * @var string
	 */
	protected $personen = '';

	/**
	 * ansprechpartner
	 * 
	 * @var string
	 */
	protected $ansprechpartner = '';

	/**
	 * starttime
	 * 
	 * @var DateTime
	 */
	protected $starttime;

	/**
	 * Returns the starttime
	 * 
	 * @return DateTime $starttime
	 */
	public function getStarttime() {
		return $this->starttime;
	}

	/**
	 * Sets the starttime
	 * 
	 * @param string $starttime
	 * @return void
	 */
	public function setStarttime($starttime) {
		$this->starttime = $starttime;
	}
	
	/**
	 * Returns the kunde
	 * 
	 * @return string $kunde
	 */
	public function getKunde() {
		return $this->kunde;
	}

	/**
	 * Sets the kunde
	 * 
	 * @param string $kunde
	 * @return void
	 */
	public function setKunde($kunde) {
		$this->kunde = $kunde;
	}

	/**
	 * Returns the personen
	 * 
	 * @return string $personen
	 */
	public function getPersonen() {
		return $this->personen;
	}

	/**
	 * Sets the personen
	 * 
	 * @param string $personen
	 * @return void
	 */
	public function setPersonen($personen) {
		$this->personen = $personen;
	}

	/**
	 * Returns the ansprechpartner
	 * 
	 * @return string $ansprechpartner
	 */
	public function getAnsprechpartner() {
		return $this->ansprechpartner;
	}

	/**
	 * Sets the ansprechpartner
	 * 
	 * @param string $ansprechpartner
	 * @return void
	 */
	public function setAnsprechpartner($ansprechpartner) {
		$this->ansprechpartner = $ansprechpartner;
	}
}
harald1972 · · Beste Antwort

Hallo erstmal,

ich weiß nicht, ob ich dir bei deinem Problem behilflich sein kann, aber ich seh in deinem Model die ein oder andere "Unsauberkeit"...

1.)Die $starttime ist vom Typ DateTime, getStarttime liefert wohl auch DateTime.
Die set-Methode allerdings soll einen string erhalten und dieses setzt du dann direkt.
Ich weiß nicht, ob das überhaupt geht. Ich würde auf jeden Fall aufpassen, bei sowas.

2.) Du hast hier eine Klasse Kunden (plural) ! abgeleitet von AbstractEntity.
Eine Entität ist immer nur einer. Jede einzelne Entität ist eine Instanz der Klasse. Der Klassenname lautet also sinnvollerweise Kunde (singular)
... soviel zur Konvention, zum guten Ton und zu den Coding Guidelines.

3.) Noch schlimmer wirds innerhalb der Klasse "Kunden". Da gibt es dann noch ein Attribut namens $kunde vom Typ string.

Ich schlag dir vor, nenn die Klasse "Kunde" und nenn dieses Attribut einfach "$name".
Du setzt ja nicht den Kunden vom Kunden, sondern den Namen des Kunden. o.O

4.) Der Ansprechpartner und die Personen (welche auch immer) hältst du dann auch in einem string o.O #deadbeat# o.O

Also ich schlag dir vor, alles - das wesentliche - noch mal zu überarbeiten.
Bei dem geposteten Stand tust du dir keinen Gefallen, wenn du daran festhältst.

Gruß
Harald

mmaxmm ·

Hallo Harald,
vielen Dank!! Du hast mir sehr geholfen!

Hier die Lösung meines Problems (vielleicht kann jemand anderes damit ja noch was anfangen):

Wie Harald bereits angedeutet hat muss natürlich die set-Methode auch einen Parameter vom Typ DateTime bekommen.

Wenn man die get-Methode dann in Fluid benutzen möchte muss man mit dem ViewHelper <f:format.date></f:format.date> arbeiten