Hallo Christian,
Deine CreateAction wird vermutlich nicht funktionieren.
Ein $this->forward() persistiert nach meinem Wissen kein Objekt. Deine
Angaben werden also nicht in die Datenbank geschrieben.
Deine Zuweisungen sind überflüssig. Du könntest $newHost, wenn ich mich
nicht irre, direkt ins Repository adden.
Dieter
Am 18.10.2017 um 14:32 schrieb christian ewigfrost:
Erst einmal, nicht wundern dass diese Frage etwas naiv klingen mag.
Dies ist das erste mal dass ich mit Typo3 arbeite, geschweige denn
eine Extension entwerfe.
Zur Problemstellung:
Per Formular lasse ich einen user Objekte einer Klasse ("Appliance"
genannt) erzeugen. Diese können mit ihren properties gelistet werden.
Durch die "show" Action kann der user sich ein Objekt aus der Liste im
Detail ansehen und die zugehörigen Objekte der Klasse "Host" (1-n
Relation im Extension Builder gewählt). Das funktioniert wunderbar.
Nun soll allerdings anhand dieser Relation der user in der Lage sein
per Formular direkt unter der Host Liste, Hosts zu eben dieser
"Appliance" hinzuzufügen. Ich kann Host Objekte ohne Relation erzeugen
lassen, aber wie kann ich diese Relation zu eben diesem "Appliance"
Objekt wählen? Ich weiß dass man mit der attach funktion der Klasse
arbeiten muss, aber hierzu muss ich ja eben jenes "Appliance" Objekt
an die Action "createhost" übergeben, damit ich die attach() Funktion
der Klasse bzw. des Objektes "Appliance" nutzen kann. Wie mach ich das?
Mein code sieht so aus:
Ich "assigne" das Objekt $appliance an den view des Templates show:
public function showAction(\Cjk\Icingaconfgen\Domain\Model\Appliance
$appliance)
{
$this->view->assign('appliance', $appliance);
}
Das Template "show" um die Detailansicht einer Appliance mit Hosts zu
generieren... :
<html xmlns:f="......" data-namespace-typo3-fluid="true">
<f:layout name="Default" />
<f:section name="main">
<h1>Single View for Appliance</h1>
<f:flashMessages />
<f:render partial="Appliance/Properties"
arguments="{appliance:appliance}" />
<h2>Assigned Hosts</h2>
<table class="tx_icingaconfgen" >
<tr>
<th><f:translate
key="tx_icingaconfgen_domain_model_appliance.kundeuid" /></th>
<th><f:translate
key="tx_icingaconfgen_domain_model_appliance.ipv4extern" /></th>
<th><f:translate
key="tx_icingaconfgen_domain_model_appliance.ipv4intern" /></th>
<th><f:translate
key="tx_icingaconfgen_domain_model_appliance.sshport" /></th>
<th> </th>
<th> </th>
</tr>
<f:for each="{appliance.hosts}" as="host">
<tr>
<td><f:link.action action="show" arguments="{host :
host}"> {host.hostid}</f:link.action></td>
<td><f:link.action action="show" arguments="{host :
host}"> {host.kundennummer}</f:link.action></td>
<td><f:link.action action="show" arguments="{host :
host}"> {host.hostname}</f:link.action></td>
<td><f:link.action action="show" arguments="{host :
host}"> {host.ipv4}</f:link.action></td>
<td><f:link.action controller="Host" action="edit"
arguments="{host : host}">Edit</f:link.action></td>
<td><f:link.action controller="Host" action="delete"
arguments="{host : host}">Delete</f:link.action></td>
</tr>
</f:for>
</table>
</br>
<h2>Add Host</h1>
<f:flashMessages />
<f:render partial="FormErrors" arguments="{object:Host}" />
<f:form action="createhost" arguments="{appliance:appliance}"
name="newHost" object="{Appliance, newHost}">
<f:render partial="Host/FormFields" />
<f:form.submit value="Add new Host" />
</f:form>
<f:link.action action="list">Back to list</f:link.action><br />
</f:section>
</html>
Die Action "createhost" im ApplianceController... Eben an diese Action
will ich das zuvor an die view assignete Objekt $appliance wieder
übergeben, damit ich mit der Funktion attach() eine Relation zw.
$appliance und dem erzeugten Host Objekt bewirken kann:
public function
createhostAction(\Cjk\Icingaconfgen\Domain\Model\Host $newHost)
{
$objectManager =
\TYPO3\CMS\Core\Utility\GeneralUtility::makeInstance('TYPO3\CMS\Extbase\Object\ObjectManager');
$hostrep =
$objectManager->get(\Cjk\Icingaconfgen\Domain\Repository\HostRepository::class);
$hostx =
$this->objectManager->get('Cjk\\Icingaconfgen\\Domain\\Model\\Host');
$hostx->setHostid($newHost->getHostid());
$hostx->setKundennummer($newHost->getKundennummer());
$hostx->setHostname($newHost->getHostname());
$hostx->setIpv4($newHost->getIpv4());
$hostrep->add($hostx);
$this->forward('show');
}
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
--
----
Dr. Dieter Porth - Web-Entwickler
_______________________________________________
TYPO3-german mailing list
TYPO3-german@lists.typo3.org
http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german