[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