[TYPO3-german] Wie übergebe ich Objekte aus einer Action an eine andere über mehrere Templates?
Dr. Dieter Porth
web37p2 at web59550.greatnet-hosting.de
Wed Oct 18 20:13:23 CEST 2017
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 at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-german
--
----
Dr. Dieter Porth - Web-Entwickler
More information about the TYPO3-german
mailing list