Guten Abend,
Bei der Erstellung einer Extension habe ich zur Zeit folgendes Problem:
Ich möchte im Frontend in einem Textfeld eines Formulars etwas eingeben, was in einem neuen Objekt der Klasse "Answer" abgespeichert wird. Die Klasse "Question" hat zur Zeit keine sonderlichen Funktionen. Ich erstelle nur eine davon im Backend, die das besagte Textfeld repräsentiert.
Durch klicken des "Submit"-Buttons wird auch ein neues Objekt erstellt. Dies weiß ich daher, dass ich mir in der drauffolgenden View mit einer for-each Schleife pro gespeicherten "Answer" ein kurzes "Test" ausgeben lasse. Allerdings wird die durch das Textfeld zu füllende Property einfach leer abgespeichert. Zudem wird auch das Datum, dass eigtl automatisch gespeichert werden sollte leer gelassen.
Ich weiß, dass das jetzt viele Dateien sind, die man sich durchlesen müsste.
Aber vielleicht ist es auch etwas ganz simples, was jemanden, der etwas mehr Erfahrung hat, direkt auffällt.
Meine Vermutung ist, dass evtl irgendetwas in der list.html der Question im Formular nicht ganz korrekt ist. Zum Beispiel irgendetwas mit dem "newAnswer" oder der Property.
Im folgenden poste ich die betroffenen Code-Auszüge.
Ich hoffe, dass sich vlt. jemand die Zeit nimmt und sich das Ganze mal kurz anguckt.
1. Die Klasse "Answer":
<?php
class Tx_Survey_Domain_Model_Answer extends Tx_Extbase_DomainObject_AbstractEntity{
/**
* recording date
*
* @var DateTime
*/
protected $date;
/**
* @var string
**/
protected $answer;
public function __construct() {
$this->date = new DateTime();
}
/**
* @param DateTime $date
* @return void
*/
public function setDate(DateTime $date) {
$this->date = $date;
}
/**
* @return DateTime
*/
public function getDate() {
return $this->date;
}
/**
* @param string $answer
* @return void
*/
public function setAnswer($answer) {
$this->answer = $answer;
}
/**
* @return string
*/
public function getAnswer() {
return $this->answer;
}
}
?>
2. Auflistung der "Answers": Templates/Answer/list.html
<h2>Begin all answers:</h2>
<f:for each="{answers}" as="answer">
<f:format.date>{answer.date}</f:format.date>
<p>Test</p>
</f:for>
<h2>End all answers:</h2>
<f:link.action action="list" controller="Question"> click </f:link.action>
3. Der "Answer"-Controller: Controller/AnswerController.php
<?php
class Tx_Survey_Controller_AnswerController extends Tx_Extbase_MVC_Controller_ActionController {
/**
* @var Tx_Survey_Domain_Repository_AnswerRepository
*/
protected $answerRepository;
/**
* @return void
*/
public function initializeAction() {
$this->answerRepository = t3lib_div::makeInstance('Tx_Survey_Domain_Repository_AnswerRepository');
}
/**
* @return string
*/
public function listAction() {
$answers = $this->answerRepository->findAll();
$this->view->assign('answers', $answers);
}
/**
* @param Tx_Guestbook_Domain_Model_Answer $newAnswer
* @return void
*/
public function createAction(Tx_Survey_Domain_Model_Answer $newAnswer) {
$this->answerRepository->add($newAnswer);
$this->redirect('list', 'Answer');
}
}
?>
4. Der "Question"-Controller: Controller/QuestionControllor.php:
<?php
class Tx_Survey_Controller_QuestionController extends Tx_Extbase_MVC_Controller_ActionController {
/**
* @var Tx_Survey_Domain_Repository_QuestionRepository
*/
protected $questionRepository;
/**
* @return void
*/
public function initializeAction() {
$this->questionRepository = t3lib_div::makeInstance('Tx_Survey_Domain_Repository_QuestionRepository');
}
/**
* @param Tx_Survey_Domain_Model_Answer $newAnswer
* @return string
* @dontvalidate $newAnswer
*/
public function listAction(Tx_Survey_Domain_Model_Answer $newAnswer = NULL) {
$questions = $this->questionRepository->findAll();
$this->view->assign('questions', $questions);
$this->view->assign('newAnswer', $newAnswer);
}
}
?>
5. Der View der Question mit dem Eingabefeld: Templates/Question/list.html
<f:form method="post" controller="Answer" action="create"
name="newAnswer" object="{newAnswer}">
<f:for each="{questions}" as="question">
<strong>{question.name}</strong>
<fieldset>
<legend>{question.frage}</legend>
<div>{question.subtext}</div>
<f:form.textfield property="answer" />
</fieldset>
<br>
</f:for>
<f:form.submit class="submit" value="Abschicken" />
<f:link.action action="list" controller="Answer"> click </f:link.action>
</f:form>
6. Der Eintrag in der ext_tables.sql:
#
# Table structure for table 'tx_survey_domain_model_answer'
#
CREATE TABLE tx_survey_domain_model_answer (
uid int(11) unsigned DEFAULT '0' NOT NULL auto_increment,
pid int(11) DEFAULT '0' NOT NULL,
date int(11) DEFAULT '0' NOT NULL,
answer varchar(255) DEFAULT '' NOT NULL,
PRIMARY KEY (uid),
KEY parent (pid),
);
Ich bin für jede Hilfeleistung sehr dankbar.
Daher schonmal vielen Dank im Voraus!
Mit freundlichen Grüßen
BjoernBoba